当前位置: 首页> 教育> 大学 > 西安网络公司未央区_上海设计网站方法_谷歌浏览器下载app_杭州搜索引擎排名

西安网络公司未央区_上海设计网站方法_谷歌浏览器下载app_杭州搜索引擎排名

时间:2025/7/12 20:22:06来源:https://blog.csdn.net/sbhsjjs/article/details/144835163 浏览次数:0次
西安网络公司未央区_上海设计网站方法_谷歌浏览器下载app_杭州搜索引擎排名

1、将广播发送和接收端实现一遍,完成一个发送端发送信息,对应多个接收端接收信息实验。

接受端

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int main(int argc, const char *argv[])
{int rfd=socket(AF_INET,SOCK_DGRAM,0);handel_err("socket",rfd);//绑定struct sockaddr_in rin={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("255.255.255.255")};int res=bind(rfd,(struct sockaddr *)&rin,sizeof(rin));handel_err("bind",res);struct sockaddr_in client;socklen_t len=sizeof(client);//接收char buf[1024]="";while(1){bzero(buf,sizeof(buf));recvfrom(rfd,buf,sizeof(buf),0,(struct sockaddr *)&client,&len);printf("[%s:%d]->%s\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port),buf);}return 0;
}

发送端

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int main(int argc, const char *argv[])
{int oldfd=socket(AF_INET,SOCK_DGRAM,0);handel_err("oldfd",oldfd);//设置广播int k=1;setsockopt(oldfd,SOL_SOCKET,SO_BROADCAST,&k,sizeof(k));printf("广播设置成功\n");struct sockaddr_in broadcast={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("255.255.255.255") //广播IP};char buf[1024];while(1){fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;sendto(oldfd,buf,sizeof(buf),0,(struct sockaddr *)&broadcast,sizeof(broadcast));}close(oldfd);return 0;
}

2、使用多线程基于TCP协议的并发执行,一个服务器对应多个客户端实现通信实验。

客户端

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
int main(int argc, const char *argv[])
{//套 链int cfd=socket(AF_INET,SOCK_STREAM,0);handel_err("socket",cfd);struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("192.168.238.227")};int res=connect(cfd,(struct sockaddr *)&server,sizeof(server));handel_err("connect",res);char buf[1024]="";while(1){printf("请输入>>");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]=0;send(cfd,buf,sizeof(buf),0);recv(cfd,buf,sizeof(buf),0);}return 0;
}

服务器

#include<myhead.h>
#define handel_err(res,val) if(val==-1){perror(res);return-1;}
//客户端信息
struct Info{int cfd;struct sockaddr_in client;socklen_t client_len;
};//子线程
void *fun(void *n){struct sockaddr_in client=(*(struct Info*)n).client;socklen_t client_len=(*(struct Info *)n).client_len;int cfd=(*(struct Info *)n).cfd;char buf[1024]="";while(1){int res=recv(cfd,buf,sizeof(buf),0);if(res==0){printf("下线\n");close(cfd);break;}printf("[%s:%d]->%s\n",inet_ntoa(client.sin_addr),htons(client.sin_port),buf);send(cfd,"收到\n",sizeof("收到\n"),0);}
}
int main(int argc, const char *argv[])
{//套 绑 监int sfd=socket(AF_INET,SOCK_STREAM,0);handel_err("socket",sfd);int k=1;setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&k,sizeof(k));struct sockaddr_in server={.sin_family=AF_INET,.sin_port=htons(6666),.sin_addr.s_addr=inet_addr("192.168.238.227")};int res=bind(sfd,(struct sockaddr *)&server,sizeof(server));handel_err("bind ",res);res=listen(sfd,10);handel_err("listen",res);//多线程操作struct sockaddr_in client;socklen_t client_len=sizeof(client);while(1){pthread_t tid;//接收int cfd=accept(sfd,(struct sockaddr *)&client,&client_len);printf("success\n");handel_err("accept",cfd);struct Info client_info={.cfd=cfd,.client=client,.client_len=client_len};//创建子线程pthread_create(&tid,NULL,fun,&client_info);//设置游离态pthread_detach(tid);}return 0;
}
关键字:西安网络公司未央区_上海设计网站方法_谷歌浏览器下载app_杭州搜索引擎排名

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: