Linux最简单的网络通信
服务器端
/* socket server * 2014-12-15 CopyRight (c) arbboter */ #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <string.h> #include <arpa/inet.h> int main() { int sockfd_server; int sockfd_client; struct sockaddr_in addr_server; struct sockaddr_in addr_client; socklen_t addr_len = 0; int client_max = 10; int server_port = 33892; srand(time(NULL)); // create socket sockfd_server = socket(AF_INET, SOCK_STREAM, 0); if(sockfd_server == -1) { printf("init socket failed\n"); return -1; } // set address memset(&addr_server, 0, sizeof(addr_server)); addr_server.sin_family = AF_INET; addr_server.sin_addr.s_addr = htonl(INADDR_ANY); addr_server.sin_port = htons(server_port); // socket bind with address if(bind(sockfd_server, (struct sockaddr*)&addr_server, sizeof(struct sockaddr)) == -1) { printf("bind socket failed\n"); return -1; } // server socket start list, waitting client to connect // 这个client_max是指同时连接数 if(listen(sockfd_server, client_max) == -1) { printf("start listen socket failed\n"); return -1; } char szMsg[128] = {0}; while(1) { addr_len = sizeof(struct sockaddr_in); printf("waitting for connected...\n"); // waitting for connected sockfd_client = accept(sockfd_server, (struct sockaddr*)&addr_client, &addr_len); if(sockfd_client == -1) { printf("accept socket failed\n"); return -1; } // get client ip and send a magic number to the client, // then close this connection printf("recived connection from : %s\n", inet_ntoa(addr_client.sin_addr)); sprintf(szMsg, "Your magic number is : %d", rand()%100); write(sockfd_client, szMsg, strlen(szMsg)); close(sockfd_client); } close(sockfd_server); return 0; }
客户端
/* socket client * 2014-12-15 CopyRight (c) arbboter */ #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <sys/types.h> #include <netdb.h> #include <string.h> #include <arpa/inet.h> int main() { int sockfd_server; struct sockaddr_in addr_server; socklen_t addr_len = 0; int server_port = 33891; char* server_addr = "192.168.2.200"; // create socket sockfd_server = socket(AF_INET, SOCK_STREAM, 0); if(sockfd_server == -1) { printf("init socket failed\n"); return -1; } // set server address memset(&addr_server, 0, sizeof(addr_server)); addr_server.sin_family = AF_INET; addr_server.sin_addr.s_addr = inet_addr(server_addr);; addr_server.sin_port = htons(server_port); // connect server if(connect(sockfd_server,(struct sockaddr *)&addr_server,sizeof(struct sockaddr))==-1) { printf("connect server failed\n"); return -1; } char szBuf[512] = {0}; int nRead = 0; // recived data from server and print it nRead = read(sockfd_server, szBuf, sizeof(szBuf)); printf("recived from server : %s\n", szBuf); close(sockfd_server); return 0; }
运行结果
# server output [arbboter@arser]$ g++ server.cpp -o server [arbboter@arser]$ ./server waitting for connected... recived connection from : 192.168.2.200 waitting for connected... recived connection from : 192.168.2.200 waitting for connected... recived connection from : 192.168.2.200 waitting for connected... recived connection from : 192.168.2.200 waitting for connected... # client output [arbboter@arser]$ g++ client.cpp -o client [arbboter@arser]$ ./client recived from server : Your magic number is : 5 [arbboter@arser]$ ./client recived from server : Your magic number is : 43 [arbboter@arser]$ ./client recived from server : Your magic number is : 88 [arbboter@arser]$ ./client recived from server : Your magic number is : 28 [arbboter@arser]$
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。