VC++之网络编程三 TCP编程实例

转自:http://blog.csdn.net/thinkscape/article/details/4037476

注释参考:http://blog.163.com/163_dhbing/blog/static/117387803200942242433217/

Server:

#include 
#include 
#include 
using namespace std;
void main()
{//mide delete wordWORD wVersionRequested;  //准备加载Winsock库的版本,注意高字节是副版本号WSADATA wsaData; //是一个返回值,指向WSADATA结构的指针,WSAStartup函数将其加载的库版本信息输入到这个结构体中。int err;wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){   return;}if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wHighVersion)!=2)/*如果加载的版本不正确,返回。需要注意的是高字节是副版本号,低字节是主版本号*/{WSACleanup();return ;}SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);/*socket(int af,int type,int protocol);    //socket 函数三个参数af,指定地址族,对于TCP/IP协议套接字,它只能是AF_INET;type参数指定Socket类型,对于1.1版本的Socket,它只支持两种类型的套接字,SOCK_STREAM指定产生流失套接字,SOCK_DGRAM产生数据报套接字;protocol是与特定的地址家族相关的协议,如果指定为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));/*s为指定要绑定的套接字;name指定了该套接字的本地地址信息,这是一个指向sockaddr结构的指针变量,该地址结构是为所有的地址家族准备的,这个结构可能随时用的网络协议不同而不同,所以才需要第三个参数namelen指定该地址结构的长度。*/listen(sockSrv,5);/*// int listen(SOCKET s,int backlog); s是Socket不用说,backlog是等待队列的最大长度,比如现在设为2,那么假如同时有3个请求来到服务器端的时候,就把前两个放到请求队列中,第三个就会被拒绝。*/SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1){SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);/*//建立连接,返回对应于此次连接的SOCKET*/char sendBuf[100];//发送数据的buffsprintf(sendBuf,"welcome %s to my space",inet_ntoa(addrClient.sin_addr));//格式化客户端地址send(sockConn,sendBuf,strlen(sendBuf)+1,0);  //发送的字节多一个,最后一个是空,结束!char recvBuf[100];//接收数据的buffrecv(sockConn,recvBuf,100,0);//接收数据printf("%s/n",recvBuf);closesocket(sockConn);//关闭连接}
}

Client:

#include 
#include 
#include 
using namespace std;
void main(){//mide delete wordWORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);if(err!=0){return;}if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wHighVersion)!=2){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));char recvBuf[100];recv(sockClient,recvBuf,100,0);printf("%s/n",recvBuf);send(sockClient,"This is wangwu",strlen("This is wangwu")+1,0);closesocket(sockClient);WSACleanup();
}

注意:

server 和 client 都要"项目属性"--->"配置属性"----> "链接"----> "输入" --->"附加依赖项"中添加"ws2_32.lib"  

(Leytton:ws2_32.lib不行则加入WSOCK32.lib)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部