Linux最简单的网络通信
来源:互联网 发布:古典吉他 知乎 编辑:程序博客网 时间:2024/06/08 01:30
服务器端
/* 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]$ ./serverwaitting for connected...recived connection from : 192.168.2.200waitting for connected...recived connection from : 192.168.2.200waitting for connected...recived connection from : 192.168.2.200waitting for connected...recived connection from : 192.168.2.200waitting for connected...# client output[arbboter@arser]$ g++ client.cpp -o client[arbboter@arser]$ ./clientrecived from server : Your magic number is : 5[arbboter@arser]$ ./clientrecived from server : Your magic number is : 43[arbboter@arser]$ ./clientrecived from server : Your magic number is : 88[arbboter@arser]$ ./clientrecived from server : Your magic number is : 28[arbboter@arser]$
0 0
- Linux最简单的网络通信
- linux 网络编程之最简单的tcp通信服务端
- linux 网络编程之最简单的tcp通信客户端
- 网络编程中最简单的TCP通信(CS模型)
- 最简单的网络编程(linux)
- 最简单的linux tcp网络编程
- 【Linux C网络编程基础】最简单的网络应用程序
- 用java实现简单的网络通信,相当于一个最简单的控制台qq(附代码)
- 基于linux简单的TCP/IP网络通信代码
- 基于linux简单的UDP网络通信代码
- VC6.0控制台程序下实现最简单的TCP网络通信
- VC6.0控制台程序下实现最简单的UDP网络通信
- c++ Windows Socket实现最简单的C/S网络通信(TCP)
- linux常用命令-简单网络通信命令
- java的网络通信最基本实现
- 基于TCP的最简单的通信
- 一个最简单的Socket通信例子
- C/S最简单的socket通信
- Matlab--------股票接口,获取股票数据
- JMM 指令重排
- 1、两人做游戏,轮流报数,报出的数只能是1、2、3、4、5、6、7、8其中之一,把两个人报出的数连加起来,谁报数后加起来的和是123,谁就获胜,让你先报,为了确保胜利,你第一个数报多少?
- Httpclient线程池的管理和利用
- Eclipse中Android公共库的正确建立及调用方法
- Linux最简单的网络通信
- 幸福生活每一天
- Apache && Nginx Log的配置
- 数组的排序
- JAVA的面试题:0.3*3=0.899999999 , 不等于0.9
- 计算2个时间之间的天数差 JS版 和 JAVA版 2种
- Maximal Rectangle
- java内存模型 内存屏障
- 搭建struts2开发环境