TCP通信示例程序

服务器端程序:

  1. /* 
  2. 程序名称:TCP通信示例程序服务器端 
  3. 作者:天行健 
  4. 完成时间:2010-4-2  17:00 
  5. */  
  6. #include <iostream>   
  7. #include <WINSOCK2.h>   
  8. using namespace std;  
  9. #pragma comment(lib,"wsock32.lib")   
  10. #define BUF_SIZE 64   
  11.   
  12. void main()  
  13. {  
  14.     WSADATA wsd;                //WSADATA变量   
  15.     SOCKET sServer,sClient;        //服务器端和客户端套接字   
  16.     int retVal;                    //返回值   
  17.     char buf[BUF_SIZE];            //存放客户端发来的字符的缓冲区   
  18.   
  19.     //第一步:初始化套接字动态库   
  20.     if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)  
  21.     {  
  22.         cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;  
  23.         return;  
  24.     }  
  25.   
  26.       
  27.     sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  28.     if(sServer==INVALID_SOCKET)  
  29.     {  
  30.         cout<<"socket failed:"<<WSAGetLastError()<<endl;  
  31.         WSACleanup();            //释放套接字资源   
  32.         return;  
  33.     }  
  34.   
  35.     //第二步:绑定套接字   
  36.     SOCKADDR_IN addrServer;        //服务器套接字地址信息   
  37.     addrServer.sin_family=AF_INET;  
  38.     addrServer.sin_port=htons(4999);  
  39.     addrServer.sin_addr.s_addr=INADDR_ANY;  
  40.   
  41.     retVal=bind(sServer,(LPSOCKADDR)&addrServer,sizeof(SOCKADDR_IN));  
  42.     if(SOCKET_ERROR==retVal)  
  43.     {  
  44.         cout<<"bind failed:"<<WSAGetLastError()<<endl;  
  45.         closesocket(sServer);  
  46.         WSACleanup();  
  47.         return;  
  48.     }  
  49.   
  50.     //第三步:监听   
  51.     retVal=listen(sServer,5);  
  52.     if(SOCKET_ERROR==retVal)  
  53.     {  
  54.         cout<<"listen failed:"<<WSAGetLastError()<<endl;  
  55.         closesocket(sServer);    //半闭套接字   
  56.         WSACleanup();            //释放套接字资源   
  57.         return;  
  58.     }  
  59.       
  60.     //第四步:接受客户端连接   
  61.     sockaddr_in addrClient;  
  62.     int addrClientlen=sizeof(addrClient);  
  63.     sClient=accept(sServer,(sockaddr FAR*)&addrClient,&addrClientlen);  
  64.     if(INVALID_SOCKET==sClient)  
  65.     {  
  66.         cout<<"accept failed:"<<WSAGetLastError()<<endl;  
  67.         closesocket(sServer);  
  68.         WSACleanup();  
  69.         return;  
  70.     }  
  71.   
  72.     //第五步:接收并显示数据   
  73.     ZeroMemory(buf,BUF_SIZE);  
  74.     retVal=recv(sClient,buf,BUF_SIZE,0);  
  75.     if(SOCKET_ERROR==retVal)  
  76.     {  
  77.         cout<<"recv failed:"<<WSAGetLastError()<<endl;  
  78.         closesocket(sServer);  
  79.         WSACleanup();  
  80.         return;  
  81.     }  
  82.   
  83.     cout<<buf<<endl;  
  84.   
  85.     //第六步:退出   
  86.     closesocket(sServer);        //半闭套接字   
  87.     closesocket(sClient);        //半闭套接字   
  88.     WSACleanup();                //释放套接字资源   
  89. }  

 

 客户端程序:

  1. /* 
  2. 程序名称:TCP通信示例程序客户端 
  3. 作者:天行健 
  4. 完成时间:2010-4-2  17:00 
  5. */  
  6. #include <iostream>   
  7. #include <WINSOCK2.h>   
  8. using namespace std;  
  9. #pragma comment(lib,"wsock32.lib")   
  10. #define BUF_SIZE 64   
  11.   
  12. void main()  
  13. {  
  14.     WSADATA wsd;  
  15.     SOCKET sServer;  
  16.     SOCKADDR_IN addrServer;  
  17.     int retVal;  
  18.     char buf[BUF_SIZE];  
  19.   
  20.     //第一步:创建套接字   
  21.     if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)  
  22.     {  
  23.         cout<<"WSAStartup failed!"<<WSAGetLastError()<<endl;  
  24.         return;  
  25.     }  
  26.   
  27.     sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
  28.     if(sServer==INVALID_SOCKET)  
  29.     {  
  30.         cout<<"socket failed:"<<WSAGetLastError()<<endl;  
  31.         WSACleanup();  
  32.         return;  
  33.     }  
  34.   
  35.     //第二步:连接服务器   
  36.     addrServer.sin_family=AF_INET;  
  37.     addrServer.sin_port=htons(4999);  
  38.     addrServer.sin_addr.s_addr=inet_addr("127.0.0.1");  
  39.   
  40.     retVal=connect(sServer,(struct sockaddr*)&addrServer,sizeof(addrServer));  
  41.     if(SOCKET_ERROR==retVal)  
  42.     {  
  43.         cout<<"connect failed:"<<WSAGetLastError()<<endl;  
  44.         closesocket(sServer);  
  45.         WSACleanup();  
  46.         return;  
  47.     }  
  48.   
  49.     //第三步:发送数据   
  50.     ZeroMemory(buf,BUF_SIZE);  
  51.     strcpy(buf,"MY TCP");  
  52.     retVal=send(sServer,buf,strlen(buf),0);  
  53.     if(SOCKET_ERROR==retVal)  
  54.     {  
  55.         cout<<"send failed:"<<WSAGetLastError()<<endl;  
  56.         closesocket(sServer);  
  57.         WSACleanup();  
  58.         return;  
  59.     }  
  60.   
  61.     //第四步:退出   
  62.     closesocket(sServer);  
  63.     WSACleanup();  
  64. }  

 

运行方法:

在DOS窗口中运行服务器端代码编译后生成的EXE程序,然后双击编译客户端代码后生成的EXE程序,即可在DOS窗口中看到 MY TCP 字符,即表示运行成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值