代码来源:《Windows网络编程》(罗莉琴,詹祖桥 主编)(如造成任何不便,请联系我删除)
// TcpClient.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <winsock2.h> #include <string> #include <iostream> #pragma comment(lib,"ws2_32.lib") #define BUF_SIZE 64 //缓冲区大小 int _tmain(int argc, _TCHAR* argv[]) { WSADATA wsd;//用于初始化Windows Socket SOCKET sHost;//与服务器进行通信的Socket SOCKADDR_IN servAddr;//服务器地址 char buf[BUF_SIZE];//用于接受数据缓冲区 int retVal;//调用各种Socket函数的返回值 //---------初始化Socket------------------- if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0) { printf("WSAStartup failed !\n"); return -1; } //--------------创建Socket---------------------------- sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);//(指定协议的地址家族,指定套接字的类型,套接字使用的协议) if (INVALID_SOCKET == sHost) { printf("socket failed !\n"); WSACleanup(); return -1; } //----------设置服务器的Socket地址--------------------- servAddr.sin_family = AF_INET; servAddr.sin_port = htons(9990); servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); int sServerAddlen = sizeof(servAddr); //--------------连接到服务器----------------------------- retVal = connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr)); if (SOCKET_ERROR == retVal) { printf("connect failed!\n"); closesocket(sHost); WSACleanup(); return -1; } //信息交互 while (true) { //向服务器发送数据 printf("Please input a string to send:"); std::string str; std::getline(std::cin,str); ZeroMemory(buf,BUF_SIZE); strcpy_s(buf,str.c_str()); retVal = send(sHost,buf,strlen(buf),0); if (SOCKET_ERROR == retVal) { printf("send failed!\n"); closesocket(sHost); WSACleanup(); return -1; } //接收服务器回传的数据 retVal = recv(sHost,buf,sizeof(buf)+1,0); printf("Recv From Server:%s\n",buf); if (strcmp(buf, "quit") == 0) { printf("quit!\n"); break; } } //-----------释放资源------------------ closesocket(sHost); WSACleanup(); system("pause"); return 0; }