1、伺服器端程式
功能:接收用戶端發來的字串,並把字串原封不動地發送給用戶端
#include <stdio.h>#include <WinSock2.h>#include "mystr.h"#include "mysock.h"#pragma comment(lib, "ws2_32")int main() { int iResult; WORD wVersionRequested; WSADATA wsaData; SOCKET listenSocket; SOCKET acceptSocket; struct sockaddr_in service; char received[256]; /* initialize winsock... create sock... bind... listen... accept... */ /* read data and send it */ memset(received, 0, sizeof(received)); readString(acceptSocket, received, sizeof(received)); while (strLen(received) > 0 && strCmp(received, "quit") != 0) { printf("received: %s\n", received); writeString(acceptSocket, received); memset(received, 0, sizeof(received)); readString(acceptSocket, received, sizeof(received)); } printf("bye-bye!\n"); closesocket(listenSocket); WSACleanup(); return 0;}
2、用戶端程式
功能:將輸入的字串發送給伺服器端,並接收和列印伺服器端發來字串
#include <stdio.h>#include <WinSock2.h>#include "mystr.h"#include "mysock.h"#pragma comment(lib, "ws2_32")int main() { int iResult; WORD wVersionRequested; WSADATA wsaData; SOCKET clientSocket; struct sockaddr_in clientService; char sent[256]; char received[256]; /* initialize winsock... create sock... connect... */ /* write data and receive it */ memset(sent, 0, sizeof(sent)); printf("> "); gets_s(sent, sizeof(sent) - 1); while (strCmp(sent, "quit") != 0) { writeString(clientSocket, sent); memset(received, 0, sizeof(received)); readString(clientSocket, received, sizeof(received)); printf("received: %s\n", received); printf("> "); gets_s(sent, sizeof(sent) - 1); } printf("bye-bye"); closesocket(clientSocket); WSACleanup(); return 0;}
運行結果如下:
圖1:用戶端程式
圖2:伺服器端程式
註:
程式碼中引用的檔案"mysock.h"請見有關socket資料轉送的函數
程式碼中引用的檔案"mystr.h"請見字串處理函數的實現
程式碼中省略的代碼請見初步認識windows socket伺服器端與用戶端編程
測試環境:Microsoft Visual Studio 2010