聊天室进化版

效果;

 服务器:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include #define PORT 12345
#define IP "192.168.10.125"#define ERR_RE(m) {printf("__%d__\n",__LINE__);perror(m);}int main(int argc, const char *argv[])
{int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd<0){ERR_RE("socket");return -1;}struct sockaddr_in sin;sin.sin_family=AF_INET;sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(IP);//存储客户信息struct sockaddr_in cin;socklen_t len=sizeof(cin);struct sockaddr_in allcin[1020];if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_RE("bind");return -1;}char buf[128]="";char buf1[128]="";ssize_t size;ssize_t size1;int j=0;printf("__%d__\n",__LINE__);pid_t pid=fork();if(pid<0){ERR_RE("fork");return -1;}else if(pid>0){while(1){//	printf("__%d__\n",__LINE__);sleep(1);size1=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,&len);if(size1<0){ERR_RE("recvfrom");}if(buf[0]=='l'){printf("%d已上线\n",ntohs(cin.sin_port));allcin[j]=cin;bzero(buf,sizeof(buf));short *ptr=(short*)buf;*ptr=cin.sin_port;strcpy(buf+2,"已上线");for(int m=0;m

客户端;

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include #define PORT 12345
#define IP "192.168.10.125"#define ERR_RE(m) {printf("__%d__\n",__LINE__);perror(m);}void hander(int sign)
{while(waitpid(-1,NULL,WNOHANG)>0);exit(0);
}int main(int argc, const char *argv[])
{int sfd=socket(AF_INET,SOCK_DGRAM,0);if(sfd<0){ERR_RE("socket");return -1;}struct sockaddr_in sin;sin.sin_family=AF_INET;socklen_t len=sizeof(sin);sin.sin_port=htons(PORT);sin.sin_addr.s_addr=inet_addr(IP);char buf[256]="";printf("请输入登录信息(l+用户名);");scanf("%s",buf);if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin))<0){ERR_RE("sendto");return -1;}pid_t pid=fork();if(pid>0){if(signal(17,hander)){return 0;}while(1){bzero(buf,sizeof(buf));short*ptr=(short*)buf;if(recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,&len)<0){ERR_RE("recvfrom");return -1;}if(ntohs(*ptr)==12345){printf("系统公告:%s\n",buf+2);}else{printf("%d%s\n",ntohs(*ptr),buf+2);}}}else if(0==pid){while(1){scanf("%s",buf);if(*buf=='c'){sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin));}else if(*buf=='q'){sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,sizeof(sin));break;		}}}close(sfd);return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部