2023年8月3日发(作者:)
C++Socket编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采⽤的流式套接字。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:绑定套接字到⼀个IP地址和⼀个端⼝上(bind());3:将套接字设置为监听模式等待连接请求(listen());4:请求到来后,接受连接请求,返回⼀个新的对应于此次连接的套接字(accept());5:⽤返回的套接字和客户端进⾏通信(send()/recv());6:返回,等待另⼀连接请求;7:关闭套接字,关闭加载的套接字库(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();第⼆式: 构造SOCKET:1.服务端:构造监听SOCKET,流式SOCKET. SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)2.客户端:构造通讯SOCKET,流式 Client_Sock = socket(AF_INET, SOCK_STREAM, 0)第三式:配置监听地址和端⼝:1.服务端: SOCKADDR_IN serverAddrZeroMemory((char *)&serverAddr,sizeof(serverAddr)); _family = AF_INET; _port = htons(1234); /*本地监听端⼝:1234*/ _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, ...)第六式: 收/发数据:1.服务端:等待客户端接⼊.char buf[1024]. 接收数据:recv(Command_Sock,buf, ...)或 发送数据:send(Command_Sock,buf, ...)2.客户端:请求与服务端连接.char buf[1024]. 发送数据:send(Client_Sock,buf, ...)或 接收数据:recv(Client_Sock,buf, ...)第七式: 关闭SOCKET:1.服务端:关闭SOCKET. closesocket(Listen_Sock)closesocket(Command_Sock)2.客户端:关闭ocket(Client_Sock)#include
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }
if ( LOBYTE( on ) != 1 || HIBYTE( on ) != 1 ) { WSACleanup( ); return; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv; _addr.S_un.S_addr=htonl(INADDR_ANY); _family=AF_INET; _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(_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%sn",recvBuf); closesocket(sockConn); }
}#include
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }
if ( LOBYTE( on ) != 1 || HIBYTE( on ) != 1 ) { WSACleanup( ); return; } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv; _addr.S_un.S_addr=inet_addr("127.0.0.1"); _family=AF_INET; _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("%sn",recvBuf);
closesocket(sockClient); WSACleanup();}
2023年8月3日发(作者:)
C++Socket编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采⽤的流式套接字。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:绑定套接字到⼀个IP地址和⼀个端⼝上(bind());3:将套接字设置为监听模式等待连接请求(listen());4:请求到来后,接受连接请求,返回⼀个新的对应于此次连接的套接字(accept());5:⽤返回的套接字和客户端进⾏通信(send()/recv());6:返回,等待另⼀连接请求;7:关闭套接字,关闭加载的套接字库(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();第⼆式: 构造SOCKET:1.服务端:构造监听SOCKET,流式SOCKET. SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)2.客户端:构造通讯SOCKET,流式 Client_Sock = socket(AF_INET, SOCK_STREAM, 0)第三式:配置监听地址和端⼝:1.服务端: SOCKADDR_IN serverAddrZeroMemory((char *)&serverAddr,sizeof(serverAddr)); _family = AF_INET; _port = htons(1234); /*本地监听端⼝:1234*/ _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, ...)第六式: 收/发数据:1.服务端:等待客户端接⼊.char buf[1024]. 接收数据:recv(Command_Sock,buf, ...)或 发送数据:send(Command_Sock,buf, ...)2.客户端:请求与服务端连接.char buf[1024]. 发送数据:send(Client_Sock,buf, ...)或 接收数据:recv(Client_Sock,buf, ...)第七式: 关闭SOCKET:1.服务端:关闭SOCKET. closesocket(Listen_Sock)closesocket(Command_Sock)2.客户端:关闭ocket(Client_Sock)#include
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }
if ( LOBYTE( on ) != 1 || HIBYTE( on ) != 1 ) { WSACleanup( ); return; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv; _addr.S_un.S_addr=htonl(INADDR_ANY); _family=AF_INET; _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(_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%sn",recvBuf); closesocket(sockConn); }
}#include
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; }
if ( LOBYTE( on ) != 1 || HIBYTE( on ) != 1 ) { WSACleanup( ); return; } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv; _addr.S_un.S_addr=inet_addr("127.0.0.1"); _family=AF_INET; _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("%sn",recvBuf);
closesocket(sockClient); WSACleanup();}
发布评论