C++套接字编程示例_第1页
C++套接字编程示例_第2页
C++套接字编程示例_第3页
C++套接字编程示例_第4页
C++套接字编程示例_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket();2:绑定套接字到一个IP地址和一个端口上(bind();3:将套接字设置为监听模式等待连接请求(listen();4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept();5:用返回的套接字和客户端进行通信(send()/recv();6:返回,等待另一连接请求;7:关闭套接字,关闭加载

2、的套接字库(closesocket()/WSACleanup()。客户端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket();2:向服务器发出连接请求(connect();3:和服务器端进行通信(send()/recv();4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup()。第一式: 加载/释放Winsock库:1.加载方法:WSADATA wsa;/*初始化socket资源*/if (WSAStartup(MAKEWORD(1,1),&wsa) != 0) return; /代表失败2.释放方法:WSACleanup();

3、第二式: 构造SOCKET:1.服务端:构造监听SOCKET,流式SOCKET. SOCKETListen_Sock= socket(AF_INET, SOCK_STREAM, 0)2.客户端:构造通讯SOCKET,流式SOCKET.SOCKETClient_Sock= socket(AF_INET, SOCK_STREAM, 0)第三式:配置监听地址和端口:1.服务端: SOCKADDR_INserverAddrZeroMemory(char *)&serverAddr,sizeof(serverAddr);serverAddr.sin_family =AF_INET;serverAddr.

4、sin_port = htons(1234); /*本地监听端口:1234*/serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/第四式: 绑定SOCKET:1.服务端:绑定监听SOCKET.bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr)第五式: 服务端/客户端连接:1.服务端:等待客户端接入. SOCKETCommand_Sock= accept(Listen_Sock, .)2.客户端:请求与服务端连接.int ret = connect(Clie

5、nt_Sock, .)第六式: 收/发数据:1.服务端:等待客户端接入.char buf1024. 接收数据:recv(Command_Sock,buf, .)或 发送数据:send(Command_Sock,buf, .)2.客户端:请求与服务端连接.char buf1024. 发送数据:send(Client_Sock,buf, .)或 接收数据:recv(Client_Sock,buf, .)第七式: 关闭SOCKET:1.服务端:关闭SOCKET. closesocket(Listen_Sock)closesocket(Command_Sock)2.客户端:关闭SOCKET.close

6、socket(Client_Sock)客户机端#include #include void main() /加载winsocket库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 )

7、WSACleanup( ); return; /创建socket SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); /创建socket要连接的(地址:端口) SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr(); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); /请求与服务器建立连接connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);

8、/发送数据 send(sockClient,hello,strlen(hello)+1,0); char recvBuf50;/接受数据recv(sockClient,recvBuf,50,0); printf(%sn,recvBuf); /关闭套接字 closesocket(sockClient);/释放Socket库 WSACleanup();服务器端#include #include void main() /加载Winsock库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(

9、 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return; /建立流式Socket SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); /配置监听端口号 SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl

10、(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); /绑定监听socket(socket和端口绑定在一起)bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR); /在Socket上监听 listen(sockSrv,5); /定义一个变量,将存储客户端地址 SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) /等待客户端接入 SOCKET sockConn=accept(sockSrv,(SO

11、CKADDR*)&addrClient,&len); char sendBuf50; sprintf(sendBuf,Welcome %s to here!,inet_ntoa(addrClient.sin_addr); /发送数据send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf50; /接受数据recv(sockConn,recvBuf,50,0); printf(%sn,recvBuf); /关闭套接字closesocket(sockConn); 面向无连接的套接字编程(数据报套接字)客户端:#include Winsock2

12、.h#include stdio.hint main()/加载socket库函数 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return 0; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return 0

13、; /创建套接字 SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN sockSrv; /创建地址+端口 sockSrv.sin_addr.S_un.S_addr=inet_addr(); sockSrv.sin_family = AF_INET ; sockSrv.sin_port = htons(6000); /直接发送sendto(sockClient,hello,strlen(hello)+1,0,(SOCKADDR*)&sockSrv,sizeof(SOCKADDR); closesocket(

14、sockClient); WSACleanup(); return 0;服务器:#include Winsock2.h#include stdio.hint main() /加载socket库函数 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return 0; if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return 0; /创建套接字 SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addSrv; addSrv.sin_addr.S_un.S_addr=inet_addr(); addSrv.sin_family = AF_INET ; addSrv.sin_port = htons(6000); bind(sockSrv,(SOCKAD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论