TCP Socket客戶端程式設計(C++)
阿新 • • 發佈:2019-02-17
程式碼來源:《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; }