C++套接字编程示例.docx

上传人:小飞机 文档编号:3153617 上传时间:2023-03-11 格式:DOCX 页数:7 大小:38.22KB
返回 下载 相关 举报
C++套接字编程示例.docx_第1页
第1页 / 共7页
C++套接字编程示例.docx_第2页
第2页 / 共7页
C++套接字编程示例.docx_第3页
第3页 / 共7页
C++套接字编程示例.docx_第4页
第4页 / 共7页
C++套接字编程示例.docx_第5页
第5页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C++套接字编程示例.docx》由会员分享,可在线阅读,更多相关《C++套接字编程示例.docx(7页珍藏版)》请在三一办公上搜索。

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

2、户端编程的步骤: 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; 第二式: 构造SOCKET: 1.服务端:构造监听SOCKET,流式

3、SOCKET. SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0) 2.客户端:构造通讯SOCKET,流式SOCKET. SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0) 第三式:配置监听地址和端口: 1.服务端: SOCKADDR_IN serverAddr ZeroMemory(char *)&serverAddr,sizeof(serverAddr); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(123

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

5、) 第六式: 收/发数据: 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(127.0.0.1); 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( 1,

9、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(INA

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

11、,&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.h #include stdio.h in

12、t main /加载socket库函数 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) if ( LOBYTE( wsaData.wVersion ) != 1 | return 0; HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( ); return 0; /创建套接字 SOCKET sockC

13、lient = socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN sockSrv; /创建地址+端口 sockSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); sockSrv.sin_family = AF_INET ; sockSrv.sin_port = htons(6000); /直接发送 sendto(sockClient,hello,strlen(hello)+1,0,(SOCKADDR*)&sockSrv,sizeof(SOCKADDR); 服务器: #include Winsock2.h #includ

14、e stdio.h int main closesocket(sockClient); WSACleanup; return 0; /加载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.wVe

15、rsion ) != 1 ) bind(sockSrv,(SOCKADDR*)&addSrv,sizeof(SOCKADDR); while(1) SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); char recvBuf100; recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len); printf(%sn,recvBuf); WSACleanup( ); return 0; /创建套接字 SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0); SOCKADDR_IN addSrv; addSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1); addSrv.sin_family = AF_INET ; addSrv.sin_port = htons(6000); closesocket(sockSrv); WSACleanup; return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号