📄 talk.c
字号:
/*这是我自己写的基于UDP的局域网内聊天的程序,实现了基本的通信功能,以后还要加上聊天记录和文件传送的功能 ,希望大家给提些意见,以便更好的改进,我的QQ为:346776910,邮箱为ufwihg@163.com,希望能和大家成为朋友,共同学习。在此向大家表示感谢!!*/#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include<arpa/inet.h>#include <string.h>#include<signal.h>#include<unistd.h>#include<fcntl.h>#include <setjmp.h>#include <time.h>int psock;void Qrecv(){ time_t timel; struct tm tml; char recvbuf[1024],ipbuf[16]; recvfrom(psock,recvbuf,1024,0,NULL,NULL); time(&timel); tml=*localtime(&timel); printf("%02d:%02d:%02d\n",tml.tm_hour,tml.tm_min,tml.tm_sec); printf("%s\n",recvbuf); signal(SIGPOLL,Qrecv);}void Qsend(int psock,char *buff,char *ip){ char sendbuf[1024],buf[]=" ";// long int ad; struct sockaddr_in addrto; memset(&addrto,0,sizeof(addrto)); addrto.sin_family = AF_INET;// ad=inet_addr(ip);// printf("%d\n",ad); addrto.sin_addr.s_addr=inet_addr(ip); addrto.sin_port=htons(2008); strcpy(sendbuf,ip); strcat(sendbuf,buf); strcat(sendbuf,buff); sendto(psock,sendbuf,sizeof(sendbuf),0,(struct sockaddr*)&addrto,sizeof(addrto));}void Qsinit(int psock){ int nType;// sleep(1);// printf("sdfas"); signal(SIGPOLL,Qrecv); fcntl(psock,F_SETOWN,getpid()); nType=fcntl(psock,F_GETFL,0); fcntl(psock,F_SETFL,nType|O_ASYNC); }int main(int argc,char **argv){struct sockaddr_in addrlocal,addrto;char buff[1024]="我真牛!!!!";char ipbuf[20];jmp_buf env1;int i;memset(&addrlocal,0,sizeof(addrlocal));addrlocal.sin_family = AF_INET;//addrlocal.sin_addr.s_addr=inet_addr("192.168.1.100");addrlocal.sin_addr.s_addr=htonl(INADDR_ANY);addrlocal.sin_port=htons(2008);if((psock=socket(AF_INET,SOCK_DGRAM,0))<=0){ printf("socket err!\n"); exit(0);}bind(psock,(struct sockaddr*)&addrlocal,sizeof(addrlocal));Qsinit(psock);Qsend(psock,buff,"192.168.1.100");setjmp(env1);//gets(buff);fgets(buff,1024,stdin);if(strchr(buff,':')==0){ if(buff[0]=='e'|buff[0]=='E') { close(psock); exit(1); } else { printf("\n输入格式错误,请重新输入!\n"); }}else{ for(i=0;*(buff+i)!=':';i++) { *(ipbuf+i)=*(buff+i); } *(ipbuf+i+1)='\0';// printf("ipbuff=%s\n",ipbuf);/* char ipa[sizeof(ipbuf)]; strcpy(ipa,ipbuf); printf("asadf%d\n\n",inet_addr(ipa));*/ Qsend(psock,(buff+i+1),ipbuf);}longjmp(env1,1);close(psock);return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -