国产探花免费观看_亚洲丰满少妇自慰呻吟_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();}

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 牡丹江市| 威海市| 宁安市| 探索| 黄浦区| 琼结县| 班玛县| 天全县| 临泽县| 锡林郭勒盟| 山东省| 顺义区| 道孚县| 文昌市| 泸州市| 巴塘县| 方正县| 车致| 扶风县| 霞浦县| 望奎县| 水富县| 广东省| 德钦县| 巴林右旗| 祁连县| 依兰县| 永嘉县| 金阳县| 莆田市| 深圳市| 岚皋县| 盈江县| 瑞金市| 开封县| 资溪县| 固原市| 讷河市| 竹北市| 咸丰县| 中西区|