c++的网络编程TCP
服务器端
// c++网络编程.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include#include //#include //#include #pragma comment(lib ,"ws2_32.lib") int main() { //加载套接字库 WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1, 1); //初始化版本号 //初始化套接字串 err = WSAStartup(wVersionRequested, &wsaData);//初始化 if (err != 0) { return err; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); //应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库所占用的系统资源。 return -1; } //新建套接字 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); //绑定套接字到本地ip地址,端口号6000 bind(sockSrv, (SOCKADDR *)&addrSrv,sizeof(SOCKADDR)); //开始监听 listen(sockSrv, 5); SOCKADDR_IN addrCli; int len = sizeof(SOCKADDR); while (true) { //接受客户连接 SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrCli, &len);//accept的第一参数套接字,第二个参数是地址,第三个参数是套接字的长度 char sendBuf[100]; sprintf_s(sendBuf, 100, "Welcome %s to qiniu", inet_ntoa(addrCli.sin_addr)); //发送数据 send(sockConn, sendBuf, strlen(sendBuf) + 1, 0);//接受数据 char recvBuf[100]; //接受数据 recv(sockConn, recvBuf, 100, 0); //打印接受的数据 std::cout << recvBuf << std::endl; closesocket(sockConn); } closesocket(sockSrv); WSACleanup(); system("pause"); return 0; }
客户端
#include#include #pragma comment(lib,"ws2_32.lib") int main() { char sendBuf[] = "hello world"; WORD wVersion; WSADATA wsaData; int err; wVersion = MAKEWORD(1, 1); err = WSAStartup(wVersion, &wsaData); if (err != 0) { return err; } if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { WSACleanup(); return -1; } //创建套接字 SOCKET sockCli = 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(sockCli, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//第一参数套接字,第二参数服务器地址,第三参数地址结构的长度 //接受数据 char recvBuf[100]; recv(sockCli, recvBuf, 100, 0); //第一参数套接字,第二参数缓冲,第三参数大小数目,第四参数为0 std::cout << recvBuf << std::endl; //发送数据 send(sockCli, sendBuf, strlen(sendBuf) + 1, 0);// //关闭套接字 closesocket(sockCli); WSACleanup(); //暂停 system("pause"); return 0; }



