TCP伺服器程式碼
阿新 • • 發佈:2018-11-11
這兩天在看網路程式設計,寫了點程式,發給大家看看.
首先看看流程:
然後直接上程式碼:
伺服器端,如果想了解客戶端的程式碼請檢視
https://blog.csdn.net/u011394598/article/details/83110068
#include <Windows.h> #include <iostream> using namespace std; #define SERVER_IP "192.168.0.168" //本地TCP伺服器IP #define SERVER_PORT 60008 //本地TCP伺服器埠 int main() { //1、 加載入Winsock DLL的相應版本 try { WORD sockVersion = MAKEWORD(2, 2); WSADATA wsaData; int result = WSAStartup(sockVersion, &wsaData); if (0 != result) { return false; } if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { WSACleanup(); return false; } } catch (...) { return false; } char buf[] = "Server: hello, I am a server....."; //2、建立用於監聽的套接字 SOCKET sockSrv = NULL; try { sockSrv = socket(AF_INET, SOCK_STREAM, 0); if (sockSrv == INVALID_SOCKET) { return 0; } } catch (...) { return 0; } SOCKADDR_IN addrSrv; addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(SERVER_PORT); //1024以上的埠號 addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.0.168"); //3、套接字繫結地址 int retVal = bind(sockSrv, (LPSOCKADDR)&addrSrv, sizeof(SOCKADDR_IN)); if (retVal == SOCKET_ERROR){ printf("Failed bind:%d\n", WSAGetLastError()); return 0; } //4、 監聽 if (listen(sockSrv, 10) == SOCKET_ERROR){ printf("Listen failed:%d", WSAGetLastError()); return 0; } SOCKADDR_IN addrClient; int len = sizeof(SOCKADDR); while (1) { //5、 等待客戶請求到來 通過對accpet函式的呼叫,可為待決連線佇列中的第一個連線請求提供服務 SOCKET sockConn = accept(sockSrv, (SOCKADDR *)&addrClient, &len); if (sockConn == SOCKET_ERROR){ printf("Accept failed:%d", WSAGetLastError()); break; } printf("Accept client IP:[%s]\n", inet_ntoa(addrClient.sin_addr)); //6、傳送資料 int iSend = send(sockConn, buf, sizeof(buf), 0); if (iSend == SOCKET_ERROR){ printf("send failed"); break; } char recvBuf[100]; memset(recvBuf, 0, sizeof(recvBuf)); // //接收資料 recv(sockConn, recvBuf, sizeof(recvBuf), 0); printf("recv: %s\n", recvBuf); closesocket(sockConn); } closesocket(sockSrv); WSACleanup(); }