#include <myhead.h>
#define SERROP 1234
#define SERIP "192.168.0.117"
int main(int argc, const char *argv[])
{
//创建套接字文件
int oldfd=socket(AF_INET,SOCK_DGRAM,0);
if(oldfd==0)
{
perror("oldfd");
return -1;
}
//绑定
struct sockaddr_in fwq={
.sin_family=AF_INET,
.sin_port=htons(SERROP),
.sin_addr.s_addr=inet_addr(SERIP)
};
if(bind(oldfd,(struct sockaddr *)&fwq,sizeof(fwq))==-1)
{
perror("bind");
return -1;
}
struct sockaddr_in recv;
int recv_len=sizeof(recv);
char buff[1024];
struct sockaddr_in client[100];//定义客户端结构体数组用于存储各个客户端
int num=0;
while(1)
{
bzero(buff,sizeof(buff));
recvfrom(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&recv,&recv_len);
printf("%s:%d发来信息\n",inet_ntoa(recv.sin_addr),ntohs(recv.sin_port));
int a=0;
for(int i=0;i<num;i++)
{
// 判断客户端是否重复添加
if(client[i].sin_addr.s_addr==recv.sin_addr.s_addr&&client[i].sin_port==recv.sin_port)
{
a=1;
break;
}
}
if(!a&&num<100)
{
//将新客户端添加到列表
client[num]=recv;
num++;
}
//转发送信息给使用客户端
for(int i=0;i<num;i++)
{
sendto(oldfd,buff,sizeof(buff),0,(struct sockaddr *)&client[i],sizeof(client[i]));
}
}
return 0;
}
完成局域网CS模型,局域网内一个服务器,多个客户端连接一个服务器,完成局域网聊天
最新推荐文章于 2024-10-14 17:50:44 发布