`

VC视频教程笔记(第14课)

    博客分类:
  • C++
阅读更多
http://www.sunxin.org/forum/thread/210.html?page=1
作者:虎非龙

第14课 网络编程
1.TCP流式套接字的编程步骤
在使用之前须链接库函数:工程->设置->Link->输入ws2_32.lib,OK!
服务器端程序:
1、加载套接字库
2、创建套接字(socket)。
3、将套接字绑定到一个本地地址和端口上(bind)。
4、将套接字设为监听模式,准备接收客户请求(listen)。
5、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。
6、用返回的套接字和客户端进行通信(send/recv)。
7、返回,等待另一客户请求。
8、关闭套接字。
客户端程序:
1、加载套接字库
2、创建套接字(socket)。
3、向服务器发出连接请求(connect)。
4、和服务器端进行通信(send/recv)。
5、关闭套接字。
服务器端代码如下:
#include <Winsock2.h>//加裁头文件
#include <stdio.h>//加载标准输入输出头文件void main()
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );//1.1版本的套接字

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
  return;
}//加载套接字库,加裁失败则返回
  if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
  WSACleanup( );
  return;
}//如果不是1.1的则退出
SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);//创建套接字(socket)。 SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//转换Unsigned short为网络字节序的格式
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字绑定到一个本地地址和端口上(bind)
listen(sockSrv,5);//将套接字设为监听模式,准备接收客户请求(listen)。 SOCKADDR_IN addrClient;//定义地址族
int len=sizeof(SOCKADDR);//初始化这个参数,这个参数必须被初始化 while(1)
{
  SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);accept的第三个参数一定要有初始值。
//等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。
//此时程序在此发生阻塞
  char sendBuf[100];
  sprintf(sendBuf,"Welcome %s to http://www.sunxin.org",
   inet_ntoa(addrClient.sin_addr));
//用返回的套接字和客户端进行通信(send/recv)。
  send(sockConn,sendBuf,strlen(sendBuf)+1,0);
  char recvBuf[100];
  recv(sockConn,recvBuf,100,0);
  printf("%s\n",recvBuf);
  closesocket(sockConn);//关闭套接字。等待另一个用户请求
}
}客户端代码如下:
#include <Winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );加载套接字库
if ( err != 0 ) {
  return;
}
  if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
  WSACleanup( );
  return;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);创建套接字(socket)。 SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));向服务器发出连接请求(connect)。 char recvBuf[100];和服务器端进行通信(send/recv)。
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
send(sockClient,"This is lisi",strlen("This is lisi")+1,0); closesocket(sockClient);关闭套接字。
WSACleanup();//必须调用这个函数清除参数
}2.UDP型套接字。
服务器端(接收端)程序:
1、创建套接字(socket)。
2、将套接字绑定到一个本地地址和端口上(bind)。
3、等待接收数据(recvfrom)。
4、关闭套接字。
客户端(发送端)程序:
1、创建套接字(socket)。
2、向服务器发送数据(sendto)。
3、关闭套接字。
服务器端代码:
#include <Winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
  return;
}
  if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
  WSACleanup( );
  return;
} SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); SOCKADDR_IN addrClient;
int len=sizeof(SOCKADDR);
char recvBuf[100]; recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
printf("%s\n",recvBuf);
closesocket(sockSrv);
WSACleanup();
}客户端代码:
#include <Winsock2.h>
#include <stdio.h>void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
  return;
}
  if ( LOBYTE( wsaData.wVersion ) != 1 ||
        HIBYTE( wsaData.wVersion ) != 1 ) {
  WSACleanup( );
  return;
} SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000); sendto(sockClient,"Hello",strlen("Hello")+1,0,
  (SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
closesocket(sockClient);
WSACleanup();
}
UDP的不再加注释了。因为它比TCP的简单多了。
3.基于字符界面的聊天程序,用的是UDP式套接字。代码略。
4.如何添加新的工程?
首先选择中Build工具栏,然后在工程管理器上点击右键,选择增加新的工程即可。
分享到:
评论

相关推荐

    孙鑫VC视频教程笔记[1].doc

    【孙鑫VC视频教程笔记】是一份记录了学习VC++编程知识的文档,主要涵盖了MFC框架和SDK编程的基础概念及技巧。以下是其中涉及到的重要知识点的详细解释: 1. **StdAfx.h**:在MFC项目中,StdAfx.h文件包含了基本的...

    VC网络验证编写开发视频教程【20课】

    资源名称:VC网络验证编写开发视频教程【20课】资源目录:【】编程视频教程网络验证编写20课第一课【】编程视频教程网络验证编写20课第七课【】编程视频教程网络验证编写20课第三课[51ZSK.COM]【】编程视频教程网络...

    C++视频教程-VC深入详解自学笔记(完全免费

    《C++视频教程-VC深入详解自学笔记》是一份全面且免费的学习资源,旨在帮助初学者和有一定基础的开发者深入理解C++编程语言,特别是通过Visual C++ (VC++)这一开发环境进行实践。教程由孙鑫整理,涵盖了从基础到高级...

    VC.rar_VC 视频教程

    这个"VC.rar"压缩包中的"VC视频教程.exe"可能是一个交互式的视频教程,旨在帮助学习者掌握VC++的基本概念和高级特性。通过观看这些视频,无论是初学者还是有经验的开发者,都可以期望获得以下方面的知识: 1. **...

    孙鑫老师vc视频教程.txt

    孙鑫老师vc视频教程

    VC就业培训宝典之MFC视频教程

    资源名称:VC 就业培训宝典之MFC视频教程资源目录:【】吕鑫:MFC视频教程第一章(1-1)【】吕鑫:MFC视频教程第一章(1-2)【】吕鑫:MFC视频教程第七章(7-1)【】吕鑫:MFC视频教程第七章(7-2)【】吕鑫:MFC...

    VC2008视频教程

    【VC2008视频教程】是一套专为初学者设计的编程教学资源,旨在帮助对Visual C++ 2008(也称VC++ 2008或MSVC9)感兴趣的用户快速掌握该开发环境和C++编程语言的基础知识。在本教程中,你将学习到如何安装Visual ...

    VC自觉笔记-1

    VC6.0的学习笔记。 正在完美中。。。。。

    VC#学习笔记仅供参考

    【VC#学习笔记仅供参考】 本笔记主要涵盖了ASP.NET应用程序的开发知识,特别是针对网页设计和数据库访问技术。在学习过程中,我们将逐步了解如何构建信息浏览页面,并深入探讨各种Web服务器控件的使用。 首先,...

    VC6.0入门视频教程及源码

    适合VC6初学者,第一步观看视频,第二步运行配套源程序学习。课程目录如下: 01基于控制台的Win32程序;02 基于对话框的MFC工程;03 基于单文档的MFC工程;04 Windows基本控件编程;05工具栏和菜单的编程;06 Win32 ...

    VC入门教程 7天学会VC

    《VC入门教程 7天学会VC》是一份专为初学者设计的编程教育资源,由知名讲师张孝祥的课程笔记整理而成。这份教程主要聚焦于Visual C++(简称VC)的使用,帮助学习者在短时间内掌握C++编程基础以及如何在VC环境下进行...

    使用VC进行VFW视频捕获笔记

    本文是关于使用Microsoft Visual C++ (VC++) 和Video for Windows (VFW) API进行视频捕获的详细笔记。VFW是Windows操作系统提供的一种视频处理框架,它简化了视频捕获、处理和播放的过程。下面将深入探讨各个关键...

    VC串口通信modbus协议源代码视频教程

    VC串口通信modbus协议源代码工程视频教程工程建立详细步骤

    vc学习教程-界面设计

    vc学习教程-界面设计,方便好用,又实惠

    如何使用vc打造局域网聊天室第1课

    完整讲述了如何使用vc打造局域网聊天室,一共10课,每课都是一个视频教程(动画教程,时长半个小时到一个小时,画面清晰,解压后大小100多M),节目如下: 第一课、编程环境及准备知识 第二课、聊天室界面的...

    vc6.0学习笔记

    **VC6.0学习笔记** Microsoft Visual C++ 6.0(简称VC6.0)是微软公司推出的一款经典且广泛使用的C++集成开发环境,它在20世纪90年代末期至21世纪初期占据了重要的地位。这份学习笔记旨在帮助初学者了解并掌握VC6.0...

    vc深入详解 笔记

    **VC深入详解笔记** 本文将基于孙鑫的《VC深入详解》一书,结合作者的个人笔记,深入探讨Microsoft Visual C++(简称VC)的各个方面,帮助读者掌握关键概念和技术,提升编程技能。《VC深入详解》是学习VC++的重要...

    在工作中对VC工作笔记

    【标题】"在工作中对VC工作笔记"涵盖了在使用Visual C++(简称VC)进行软件开发过程中的实践经验与总结。这份笔记可能包含了作者在实际项目中遇到的问题、解决方法以及对于VC工具和库的深入理解。 【描述】"一些...

    vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟19

    vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟vc教程杨章伟v

    vc视频教程-MFC AppWizard的原理与MFC程序框架的剖析.zip

    《VC视频教程——MFC AppWizard的原理与MFC程序框架的剖析》是孙鑫老师针对C++编程语言中的Microsoft Foundation Class (MFC) 库进行深入讲解的课程。MFC是一个由微软提供的C++类库,它为Windows应用程序开发提供了...

Global site tag (gtag.js) - Google Analytics