在win下的服务器端,点充许访问
CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(server)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_BUILD_TYPE Debug)
set(Srcs
hello_server_win.c.cpp
)
set(Hdrs
)
link_libraries (ws2_32) //连接winsock2静态库
add_executable(${PROJECT_NAME} ${Srcs} ${Hdrs})
hello_server_win.c.cpp
#includelinux 端#include #include void ErrorHandling(char const * message); int main(int argc, CHAR* argv[]) { WSADATA wsaData; SOCKET hServSock,hClntSock; SOCKADDR_IN servAddr,clntAddr; int szClntAddr; char message[]="test from other win!"; if(argc!=2) { printf("Usage : %s n",argv[0]); exit(1); } if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) ErrorHandling("WSAStartup() error"); hServSock=socket(PF_INET,SOCK_STREAM,0); if(hServSock==INVALID_SOCKET) ErrorHandling("socket() error"); memset(&servAddr,0,sizeof(servAddr)); servAddr.sin_family=AF_INET; servAddr.sin_addr.s_addr=htonl(INADDR_ANY); servAddr.sin_port=htons(atoi(argv[1])); if(bind(hServSock,(SOCKADDR*) &servAddr,sizeof(servAddr))==SOCKET_ERROR) ErrorHandling("bind() error"); if(listen(hServSock,5)==SOCKET_ERROR) ErrorHandling("listen() error"); szClntAddr=sizeof(clntAddr); hClntSock=accept(hServSock,(SOCKADDR*)&clntAddr,&szClntAddr); if(hClntSock==INVALID_SOCKET) ErrorHandling("accept() error"); send(hClntSock,message,sizeof(message),0); closesocket(hClntSock); closesocket(hClntSock); WSACleanup(); return 0; } void ErrorHandling(char const * message) { fputs(message,stderr); fputc('n',stderr); exit(1); }
在linux上的客户端,会接收到win下的服务器的信息。
#include#include #include #include #include #include void error_handling(char *message); int main(int argc, char *argv[]) { int sock; struct sockaddr_in serv_addr; char message[30]; int str_len; if (argc != 3) { printf("Usage : %s n", argv[0]); exit(1); } //创建套接字,此时套接字并不马上分为服务端和客户端。如果紧接着调用 bind,listen 函数,将成为服务器套接字 //如果调用 connect 函数,将成为客户端套接字 sock = socket(PF_INET, SOCK_STREAM, 0); if (sock == -1) error_handling("socket() error"); memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); //调用 connect 函数向服务器发送连接请求 if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) error_handling("connect() error!"); str_len = read(sock, message, sizeof(message) - 1); if (str_len == -1) error_handling("read() error!"); printf("Message from server : %s n", message); close(sock); return 0; } void error_handling(char *message) { fputs(message, stderr); fputc('n', stderr); exit(1); }



