预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于TCP(面向连接)的socket编程,分为客户端和服务器端。 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send/recv) (4)关闭套接字 服务器端的流程如下: (1)创建套接字(socket) (2)将套接字绑定到一个本地地址和端口上(bind) (3)将套接字设为监听模式,准备接收客户端请求(listen) (4)等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept) (5)用返回的套接字和客户端进行通信(send/recv) (6)返回,等待另一个客户请求。 (7)关闭套接字。 下面通过一个具体例子讲解一下具体的过程和相关的函数。 客户端代码,运行于vs2008 [cpp]HYPERLINK"http://blog.csdn.net/chocolate001/article/details/6612201"\o"viewplain"viewplainHYPERLINK"http://blog.csdn.net/chocolate001/article/details/6612201"\o"copy"copy //ClientTest.cpp:定义控制台应用程序的入口点。 // #include"stdafx.h" #include<stdio.h> #include<stdlib.h> #include<winsock2.h> #defineSERVER_PORT5208//侦听端口 int_tmain(intargc,_TCHAR*argv[]) { WORDwVersionRequested; WSADATAwsaData; intret; SOCKETsClient;//连接套接字 structsockaddr_insaServer;//服务器地址信息 char*ptr; BOOLfSuccess=TRUE; //WinSock初始化 wVersionRequested=MAKEWORD(2,2);//希望使用的WinSockDLL的版本 ret=WSAStartup(wVersionRequested,&wsaData);//加载套接字库 if(ret!=0) { printf("WSAStartup()failed!\n"); //return0; } //确认WinSockDLL支持版本2.2 if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2) { WSACleanup();//释放为该程序分配的资源,终止对winsock动态库的使用 printf("InvalidWinSockversion!\n"); //return0; } //创建Socket,使用TCP协议 sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(sClient==INVALID_SOCKET) { WSACleanup(); printf("socket()failed!\n"); //return0; } //构建服务器地址信息 saServer.sin_family=AF_INET;//地址家族 saServer.sin_port=htons(SERVER_PORT);//注意转化为网络节序 saServer.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); //连接服务器 ret=connect(sClient,(structsockaddr*)&saServer,sizeof(saServer)); if(ret==SOCKET_ERROR) { printf("connect()failed!\n"); closesocket(sClient);//关闭套接字 WSACleanup(); //return0; } charsendMessage[]="ZhongXingPengYue"; ret=send(sClient,(char*)&sendMessage,sizeof(sendMessage),0); if(ret==SOCKET_ERROR) { printf("send()failed!\n"); } else printf("clientinfohasbeensent!"); charrecvBuf[100]; recv(sClient,recvBuf,100,0); printf("%s\n",recvBuf); closesocket(sClient);//关闭套接字 WSAClean