国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++ 中 socket編程實例詳解

2020-01-26 14:05:05
字體:
來源:轉載
供稿:網友

C++ 中 socket編程實例詳解

sockets(套接字)編程有三種,流式套接字(SOCK_STREAM),數據報套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket編程是采用的流式套接字。在這個程序中,將兩個工程添加到一個工作區。要鏈接一個ws2_32.lib的庫文件。

服務器端編程的步驟:

1:加載套接字庫,創建套接字(WSAStartup()/socket());

2:綁定套接字到一個IP地址和一個端口上(bind());

3:將套接字設置為監聽模式等待連接請求(listen());

4:請求到來后,接受連接請求,返回一個新的對應于此次連接的套接字(accept());

5:用返回的套接字和客戶端進行通信(send()/recv());

6:返回,等待另一連接請求;

7:關閉套接字,關閉加載的套接字庫(closesocket()/WSACleanup())。

服務器端代碼如下:

#include <stdio.h>#include <Winsock2.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_STREAM,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)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%s/n",recvBuf); closesocket(sockConn); }}

客戶端編程的步驟:

1:加載套接字庫,創建套接字(WSAStartup()/socket());

2:向服務器發出連接請求(connect());

3:和服務器端進行通信(send()/recv());

4:關閉套接字,關閉加載的套接字庫(closesocket()/WSACleanup())。

客戶端的代碼如下:

#include <stdio.h>#include <Winsock2.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);  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)); send(sockClient,"hello",strlen("hello")+1,0); char recvBuf[50]; recv(sockClient,recvBuf,50,0); printf("%s/n",recvBuf);  closesocket(sockClient); WSACleanup();}

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来安县| 泊头市| 盈江县| 鹤岗市| 乌恰县| 贡觉县| 台北市| 鸡泽县| 游戏| 凭祥市| 浦城县| 盐亭县| 汽车| 专栏| 西昌市| 柳州市| 周宁县| 绍兴县| 景谷| 兴义市| 濮阳市| 河津市| 九寨沟县| 邛崃市| 南丰县| 安新县| 沁阳市| 景泰县| 游戏| 大石桥市| 瑞丽市| 吴堡县| 三江| 平乐县| 封开县| 卢湾区| 乐至县| 隆安县| 积石山| 金山区| 桂阳县|