TCP客戶端程式(C語言)
阿新 • • 發佈:2018-12-13
TCP客戶端程式,與TCP伺服器端配合使用
Visual Stdio執行
// TCP客戶端.cpp : 定義控制檯應用程式的入口點。 // #include"stdafx.h" #include<stdio.h> #include<winsock2.h> #include<iostream> #pragma comment (lib,"ws2_32") using namespace std; int main() { //WSA是web server API的簡寫 WSADATA wsaData; //給WSAStartup初始化用的資料結構 WSAStartup(MAKEWORD(2, 2), &wsaData); //MAKEWORD是合成一個字,用來表示版本資訊的 //指向一個WSADATA的指標。 SOCKET sServer = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); //socket函式呼叫成功會返回一個套接字描述符,失敗則返回INVALID_SOCKET //呼叫socket時應該使用PF_INET (協議族) //指定新套接字描述符的型別 SOCK_STREAM是流套接字 //指定應用程式所使用的通訊協議 printf("socket create successfully\n"); struct sockaddr_in ServerAddr; //sockaddr結構體是為了保持各個特定協議之間的相容性而設計的 //是一個用來儲存地址資訊的結構體 //為bind()函式指定地址和埠時,向sockaddr_in結構體填充相應的內容 printf("init connect ...\n"); ServerAddr.sin_family = AF_INET; ServerAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //inet_addr轉換函式把點分十進位制表示的IP地址轉換為in_addr結構體可以接受的型別 ServerAddr.sin_port = htons(1234); //htons() 轉換位元組序 int err_log=connect(sServer, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr)); //將套接字進行連線 //建立好的套接字描述符 //指向sockaddr結構體的指標。sockaddr結構體中儲存了伺服器的IP地址和埠號 //指定sockaddr結構體的長度 if(err_log==0) printf("connect successfully\n"); char szMsg[MAXBYTE] = { 0 }; recv(sServer, szMsg, MAXBYTE, 0); cout << szMsg << endl; //接受訊息 //使用方法與send相同 printf("Client Msg : %s \r\n", szMsg); lstrcpy(szMsg, "hello Server!\r\n"); send(sServer, szMsg, strlen(szMsg) + sizeof(char), 0); WSACleanup(); system("pause"); return 0; }