基于Linux下局域网内多Client向一个Service通信
来源:互联网 发布:ally mac tyana种子 编辑:程序博客网 时间:2024/06/05 01:12
博客中的那篇通信文章仅仅能够实现一个客户端向一个服务器发送消息,当在局域网内多客户端向往服务器端发送消息,则无法实现。最近用到多个ARM板和PC机组网通信的问题,于是便改进了服务器的代码,加入线程实现这个功能,现在代码贴出来!
/* ************************************************ *Name : Linux Server * *Date : 2015-03-27 * *Author : Sniper * *Aim : Service can receive more than one * * Client that send the message. * ************************************************ */#include <stdio.h>#include <sys/socket.h>#include <netinet/in.h>#include <stdlib.h>#include <memory.h>#include <string.h>#include <sys/socket.h>#include <pthread.h>int socketfd_connect = 0;pthread_t ntid;int len = 0;void *print_message(void *arg){char buf[100];int pthread_socket_connect;pthread_socket_connect = socketfd_connect;pthread_detach(ntid);memset(buf,0,100);len=recv(pthread_socket_connect,buf,100,0);if(len<0){printf("recv error!\n");exit(1);}else if(0 == len){printf("the client quit!\n");exit(1);}else{printf("receive message is : %s \n",buf);}printf("------------------------\n");pthread_exit(0);}int main(int argc,char *argv[]){int socketfd_listen;struct sockaddr_in server_addr,client_addr;unsigned short portnum = 0x22B8;int err;/* *Create the socket */if((socketfd_listen=socket(AF_INET,SOCK_STREAM,0))<0){printf("Socket create error! \n");exit(1);}/* *set the address format */bzero(&server_addr,sizeof(struct sockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_addr.s_addr=inet_addr("192.168.81.122");server_addr.sin_port=htons(portnum);if(bind(socketfd_listen,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))<0){printf("bind failure!\n");return -1;}printf("bind Success!\n");if(listen(socketfd_listen,5)<0){printf("Listen failure!\n");return -1;}len=sizeof(struct sockaddr);/* *Using the loop to send and receive the message. */while(1){socketfd_connect = accept(socketfd_listen, (struct sockaddr *)(&client_addr), &len);if(socketfd_connect<0){printf("accept fail !\n");return -1;}err = pthread_create(&ntid,NULL,print_message,NULL);if(err!=0)printf("can't create pthread!\n");}close(socketfd_listen);close(socketfd_connect);return 0;}
最近用的是Arm-2410 的板子,我把客户端和服务器端的代码放到下面的链接中,供大家使用:
链接中生成的是arm-linux-gcc-3.4.6编译通过的客户端代码,如果想改成PC端的只用修改Makefile中的文件即可。
http://pan.baidu.com/s/1ntsqowL
0 0
- 基于Linux下局域网内多Client向一个Service通信
- linux下第一个socket编程实现的局域网内通信(基于TCP)
- linux下查找局域网内的ip
- linux UDP 局域网内广播通信服务器端和客户端
- linux UDP 局域网内广播通信服务器端和客户端
- linux UDP 局域网内广播通信服务器端和客户端
- 基于linux下的局域网聊天
- 一个局域网内Windows和linux系统如何共享文件
- Qt5--局域网内通信-单服务器多客户端
- Linux下访问局域网内windows共享目录
- linux下查找局域网内的ip--nmap工具使用
- linux环境下的Xampp局域网内访问问题
- Linux 下查看局域网内所有主机IP和MAC
- linux下discus/apache服务器,局域网内无法访问--解决办法
- Linux 下查看局域网内所有主机IP和MAC
- Linux 下查看局域网内所有主机IP和MAC
- Linux 下查看局域网内所有主机IP和MAC
- Linux之ubuntu下使用局域网内Windows共享打印机
- 利用PB技术实现输入框的水印效果
- [spring mvc]tomcat生成处理线程执行spring mvc时的思考
- Canny边缘检测算法原理及其VC实现详解(二)
- iOS简单排序--字母排序、NSDictionary排序
- poj 4052 Hrinity AC自动机
- 基于Linux下局域网内多Client向一个Service通信
- springmvc--注解crud
- shell中$0,$?,$!等的特殊用法
- ScrollView与ListView冲突解决
- MyBatis+Spring 事务管理
- mysql基础语法及拓展到web中的sql注入
- invalid project description
- 提高Linux上socket 性能
- 【菜鸟Opencv 3】-VideoWriter的用法 视频输出