客户端代码 /************************************************************* 1、程序功能:向服务器端询问时间,然后打印服务器端返回的内容。 2、采用winsock编程,版本2.2 客户端代码 *************************************************************/ #include <winsock2.h> #include <stdio.h> #define BUFFER_SIZE 1024 #define PORT 5000 void main(int argc,char *argv[]) { WSADATA wsaData; SOCKET clientSocket; SOCKADDR_IN serverAddr; if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) { printf("Winsock load failed/n"); WSACleanup(); return; }; //clientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); clientSocket = socket(AF_INET, SOCK_STREAM, 0); if(clientSocket==INVALID_SOCKET) { printf("scoket() failed:%d/n",WSAGetLastError()); WSACleanup(); return; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(PORT); serverAddr.sin_addr.S_un .S_addr = inet_addr(argv[1]); printf("port%d/n", ntohs(serverAddr.sin_port) ); if(connect(clientSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr)) == INVALID_SOCKET) { printf("connect() failed:%d/n",WSAGetLastError()); WSACleanup(); return; }; int byteSent; int byteRecv; char sendBuf[BUFFER_SIZE]; char recvBuf[BUFFER_SIZE]; memset(recvBuf,0,sizeof(recvBuf)); memset(recvBuf,0,sizeof(sendBuf)); strcpy(sendBuf,"Hello, what's the time?"); ::Sleep(100); byteSent = send(clientSocket, sendBuf, strlen(sendBuf), 0); if(byteSent == SOCKET_ERROR) { printf("send() failed:%d/n", WSAGetLastError()); return; } else if(byteSent == 0) return; printf ( "send data is : %s/n" , sendBuf ); byteRecv = recv(clientSocket, recvBuf, sizeof(recvBuf), 0); if(byteRecv == SOCKET_ERROR) { printf("recv() failed:%d/n", WSAGetLastError()); return; } else if(byteRecv == 0) return; printf ( "recieve data is : %s/n" , recvBuf ); closesocket(clientSocket); WSACleanup(); } 服务器端代码 #include <winsock2.h> #include <stdio.h> #include <string> #include <stdlib.h> using namespace std; #define PORT 5000 #define BUFFER_SIZE 1024 void main(int argc,char *argv[]) { WSADATA wsaData; SOCKET serverSocket; SOCKET connSocket; SOCKADDR_IN serverAddr; SOCKADDR_IN clientAddr; if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) { WSACleanup(); return; }; //serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); serverSocket = socket(AF_INET, SOCK_STREAM, 0); if(serverSocket==INVALID_SOCKET) { printf("socket failed:%d/n",WSAGetLastError()); WSACleanup(); return; } serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons( PORT); serverAddr.sin_addr.S_un .S_addr = htonl(INADDR_ANY); if(bind(serverSocket, (SOCKADDR*)&serverAddr, sizeof(serverAddr))==SOCKET_ERROR) { printf("bind() failed:%d/n",WSAGetLastError()); WSACleanup(); return; } else { printf("bind() OK/n"); } if(listen(serverSocket, 5)!= 0) { printf("listen() failed:%d/n",WSAGetLastError()); WSACleanup(); return; } else { printf("listen() OK/n"); } int ClientAddrLen = sizeof(clientAddr); int byteSent; int byteRecv; char sendBuf[BUFFER_SIZE]; char recvBuf[BUFFER_SIZE]; memset(sendBuf, 0, sizeof(sendBuf) ); memset(recvBuf, 0, sizeof(recvBuf) ); SYSTEMTIME ti; while(true) { connSocket = accept(serverSocket, (SOCKADDR*)&clientAddr,&ClientAddrLen); if(connSocket == INVALID_SOCKET) { printf("accept() failed:%d/n", WSAGetLastError()); break; } printf("port%d/n", ntohs(serverAddr.sin_port )); printf("The connected client is: %s , port: %d/n ", inet_ntoa(clientAddr.sin_addr ),ntohs(clientAddr.sin_port ) ); byteRecv = recv(connSocket, recvBuf, sizeof(recvBuf), 0); if(byteRecv == SOCKET_ERROR) { printf("recv() failed:%d/n", WSAGetLastError()); break; } else if(byteRecv == 0) break; printf ( "recieve data is : %s/n" , recvBuf ); char cmpBuf[BUFFER_SIZE]; memset(cmpBuf, 0, sizeof(cmpBuf)); strcpy(cmpBuf, "Hello, what's the time?"); if(strcmp(recvBuf, cmpBuf) == 0) { //GetSystemTime(&ti); UTC时间 GetLocalTime(&ti); //本地时间 sprintf(sendBuf, "time is %d:%d:%d", ti.wHour, ti.wMinute, ti.wSecond); byteSent = send(connSocket, sendBuf, sizeof(sendBuf), 0); //竟然写错socket 倒霉 if(byteSent == SOCKET_ERROR) { printf("sent() failed:%d/n", WSAGetLastError()); break; } else if(byteSent == 0) break; else printf("send() byte: %d/n", byteSent); } else { strcpy(sendBuf, "Hi"); byteSent = send(connSocket, sendBuf, sizeof(sendBuf), 0); //竟然写错socket 倒霉 if(byteSent == SOCKET_ERROR) { printf("sent() failed:%d/n", WSAGetLastError()); break; } else if(byteSent == 0) break; else printf("send() byte: %d/n", byteSent); } closesocket(connSocket); } closesocket(serverSocket); WSACleanup(); }