问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux实现服务端与客户端通信,在已有代码上修改,要把串行改成并行通信,多个客户端与服务端通信。

发布网友 发布时间:2022-05-06 19:01

我来回答

1个回答

热心网友 时间:2023-09-11 15:23

给你一个小例子,对着修改一下吧。
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/un.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <netinet/in.h>
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 100
int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size,recvbytes;
fd_set readfd;
fd_set writefd;
int sockfd,client_fd;
char buf[MAXDATASIZE];
/*创建socket*/
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
/*设置sockaddr结构*/
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
/*将本地ip地址绑定端口号*/
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
printf("bind success!\n");
/*监听*/
if(listen(sockfd,BACKLOG)==-1){
perror("listen");
exit(1);
}
printf("listening....\n");
/*select*/
FD_ZERO(&readfd); // 将readfd 清空
FD_SET(sockfd,&readfd); //将sockfd加入到readfd集合中
while(1){
sin_size=sizeof(struct sockaddr_in);
if(select(MAX_CONNECTED_NO,&readfd,NULL,NULL,(struct timeval *)0)>0){ //第一个参数是0和sockfd的最大值加1,第二个参数是读集,第三、四个参数是写集 //和异常集
if(FD_ISSET(sockfd,&readfd)>0){ // FD_ISSET 这个宏判断 sockfd 是否属于可读的文件描述符。从 sockfd 中读入, 输出到标准输出上去.
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){ //client_sockaddr:客户端地址
perror("accept");
exit(1);
}
if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){
perror("recv");
exit(1);
}
if(read(client_fd,buf,MAXDATASIZE)<0){
perror("read");
exit(1);
}
printf("received a connection :%s",buf);
}/*if*/
close(client_fd);
}/*select*/
}/*while*/
}

开源人
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胶原蛋白线双眼皮是不是永久性 双眼皮埋线是蛋白质还是尼龙绳-双眼皮埋线蛋白线多久能吸收 人体输液的“港口”完全植入式输液港 双眼皮宽变窄修复的方法 同心保家庭重疾险靠不靠谱?便宜吗? 做完双眼皮一宽一窄怎么办 喝全脂奶粉对长高有没有什么好处? redmine中“选择一个项目..."下拉列表框中为什么只列出一个项目,我建... 南充市龙门中学实力现在怎样?他的奥赛班是重点班么? 感情中为什么总是不知足呢? 什么是增幅,增长率,具体怎么算.说的最好 胳膊上的穴位及其代表的内脏。如捏哪块就代表肝不好或者心脏不好这样的。 增幅什么意思?反义词是什么? 增幅是什么意思? 用自己的房产证办理抵押贷款,一般能贷多少,利率多少算合理范围? 皮皮虾里的视频为什么播放两次? 请问网友们,辣妈亲子群公告怎么写?帮帮我&#xF64F;&#xF64F;&#xF64F; linux socket 没有bind可以connect成功么 原子的结构模型与太阳系有什么异同? 我做微商要把推广到百度不知怎么做 玻尔原子结构模型的最大不足之处 不花钱字体 收集原子结构模型发展有关资料,并摘记主要的观点 有没有一个不用root权限就可以换字体的软件?要不收费的,谢谢。 卢瑟福提出的核式结构原子模型有什么不足? 辣妈群群名称,跪求一个高大上的辣妈群群名 三种原子模型 广州辣妈群 4个关于原子结构模型的发展的观点 手贱吧ie浏览器和一键ghost粉碎了怎么办 LINUX C下ACCEPT失败,前面SOCKET,BIND,LISTEN都成功 背阔肌/背肌锻炼方法图解怎么练,哑铃,杠铃,无器械 Ununtu Linux Socket 程序,调用send后进程自动退出,大侠们帮忙诊断一下什么原因啊? 风热感冒引起喉咙痛,专家介绍胳膊上这个穴位,按摩就能缓解! 数码相机内存32MB可以储存多少张照片? 32g存储用于相机能拍多少张照片? 滴滴抢单神器有用吗? 辅助滴滴是什么意思 滴滴车主有辅助吗? C盘满了怎么办,教您怎么解决C盘满了的问题 滴滴打车可以用蚂蚁花呗支付吗 滴滴快车司机可不可以自动接单 死因链简明填写方法详解 人死亡的主要原因是什么 疾病首要死亡原因是什么 做美容死亡的ICD编码怎样写? 人自然死亡的原因? A群多糖疫苗打开后多长时间内用完 郑州一外卖小哥半夜躺电瓶车上在隧道睡觉,他们的工作有多辛苦? 银行行长辞职创业失败转做外卖骑手,外卖员的工作有多辛苦?