winsock实现客户端 服务器通信
2010-12-12 21:29
405 查看
客户端代码
服务器端代码
/************************************************************* 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(); }
相关文章推荐
- 某实例+修改 Winsock实现基于TCP的客户端/服务器通信
- 用C#中的Socket连接实现服务器与客户端通信
- VB6 通过winsock控件数组实现客户端和服务器多对一通信
- HttpClient实现客户端与服务器的通信
- 多线程实现服务器与多个客户端通信
- Linux套接字实现服务器和客户端通信
- Onvif客户端与服务器通信时鉴权的自实现
- 基于非阻塞socket的多线程服务器的实现------一个服务器如何与多个客户端进行通信?
- Android客户端与PC服务器实现Socket通信
- 基于客户端轮询服务器思想实现的网页即时通信Demo
- C#利用服务器实现客户端之间通信
- unity3d Android客户端与PC服务器实现Socket通信(wifi)
- VB6 通过winsock控件数组实现客户端和服务器多对一通信
- C#使用Socket实现一个socket服务器与多个socket客户端通信
- Socket实现Android客户端与服务器的通信
- 一个客户端服务器通信实现细节
- Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
- SignalR实现服务器与客户端的实时通信
- 服务器—客户端模式实现简单的通信
- SignalR实现服务器与客户端的实时通信