首页 > 代码库 > Visual C++网络编程--TCP通信

Visual C++网络编程--TCP通信

TCP服务端

 1 #include <WinSock2.h>        //包含头文件 2 #include <stdio.h>             3 #include <Windows.h> 4 #include <iostream> 5 #pragma  comment(lib,"WS2_32.lib")  //显示连接套接字库 6 int main()                    //主函数开始 7 { 8     WSADATA data;            //定义WSADATA结构体对象 9     WORD w=MAKEWORD(2,0);   //定义版本号码10     char sztext[]="欢迎你\r\n"; //定义并初始化发送到客户端的字符数组11     WSAStartup(w,&data);     //初始化套接字库12     SOCKET s,s1;             //定义连接套接字和数据收发套接字句柄13     s=socket(AF_INET,SOCK_STREAM,0);  //创建TCP套接字14     sockaddr_in addr,addr2;  //定义套接字地址结构15     int n=sizeof(addr2);     //获取套接字地址结构大小16     addr.sin_family=AF_INET;  //初始化地址结构17     addr.sin_port=htons(75);18     addr.sin_addr.S_un.S_addr=INADDR_ANY;19     bind(s,(sockaddr*)&addr,sizeof(addr));  //绑定套接字20     listen(s,5);                            //监听套接字21     std::cout<<"服务器已经启动\r"<<std::endl; //输出提示信息22     while(true)23     {24         s1=accept(s,(sockaddr*)&addr2,&n);    //接受连接申请25         if (s1!=NULL)26         {27             std::cout<<"已经连上\r"<<std::endl<<inet_ntoa(addr2.sin_addr);28             send(s1,sztext,sizeof(sztext),0);  //向客户端发送字符数组29         }30         closesocket(s);31         closesocket(s1);                        //关闭套接字句柄32         WSACleanup();                            //释放套接字库33         if (getchar())                            //如果有输入,则关闭程序34         {35             return 0;                            //正常关闭程序36         }37          else38          {39              Sleep(100);                        //应用睡眠0.1秒40         }41 42     }43 }

运行结果

服务器程序启动后,如果没有客户端向其发送连接请求,则服务器将一直等待知道有客户端程序连接。

TCP客户端

 1 #include <WinSock2.h>        //包含头文件 2 #include <stdio.h>             3 #include <Windows.h> 4 #include <iostream> 5 #pragma  comment(lib,"WS2_32.lib")  //显示连接套接字库 6 int main()                    //主函数开始 7 { 8     WSADATA data;            //定义WSADATA结构体对象 9     WORD w=MAKEWORD(2,0);   //定义版本号码10     char sztext[10]={0}; //定义并初始化发送到客户端的字符数组11     WSAStartup(w,&data);     //初始化套接字库12     SOCKET s;             //定义连接套接字和数据收发套接字句柄13     s=socket(AF_INET,SOCK_STREAM,0);  //创建TCP套接字14     sockaddr_in addr;  //定义套接字地址结构15     addr.sin_family=AF_INET;  //初始化地址结构16     addr.sin_port=htons(75);17     addr.sin_addr.S_un.S_addr=inet_addr("192.168.7.6");18     std::cout<<"客户端已经启动\r"<<std::endl; //输出提示信息19     connect(s,(sockaddr*)&addr,sizeof(addr));20     recv(s,sztext,sizeof(sztext),0);21     std::cout<<sztext<<std::endl;22         closesocket(s);    //关闭套接字句柄23         WSACleanup();    //释放套接字库24         if (getchar())    //如果有输入,则关闭程序25         {26             return 0;    //正常关闭程序27         }28         else29         {30             Sleep(100);    //应用睡眠0.1秒31         }32 33     34 }

 

编译运行程序,先打开服务端,再打开客户端,那么服务端会接受客户端的请求,客户端也会显示欢迎信息。

Visual C++网络编程--TCP通信