#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
char buf[100]="";
int i =1;
int udpfd;
struct sockaddr_in addr={AF_INET};
struct sockaddr_in saddr={AF_INET};
saddr.sin_port = htons(8000);
int addrlen = sizeof(addr);
fd_set rset;
addr.sin_port = htons(8000);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
if((udpfd=socket(AF_INET,SOCK_DGRAM, 0))<0)
{
perror("socket");
exit(1);
}
if(bind(udpfd, (struct sockaddr*)&addr, sizeof(addr))<0)
{
perror("bind");
exit(1);
}
printf("input: /"say 192.168.220.X/" to sendmsg to somebody/n");
while(1)
{
FD_ZERO(&rset);
FD_SET(0, &rset);
FD_SET(udpfd, &rset);
memset(buf, 0, sizeof(buf));
write(1,"UdpQQ:",6);
if(select(udpfd+1, &rset, NULL, NULL, NULL)!=0)
{
if(FD_ISSET(0, &rset))
{
fgets(buf, 100, stdin);
buf[strlen(buf)-1]='/0';
if(strncmp(buf, "sayto", 5)==0)
{
saddr.sin_addr.s_addr = inet_addr(buf+6);
printf("/rsay to %s/n",inet_ntoa(saddr.sin_addr));
continue;
}
else if(strcmp(buf, "exit")==0)
{
close(udpfd);
exit(1);
}
sendto(udpfd, buf, strlen(buf),0,(struct sockaddr*)&saddr, sizeof(saddr));
}
if(FD_ISSET(udpfd, &rset))
{
recvfrom(udpfd, buf, 100, 0, (struct sockaddr*)&addr, &addrlen);
printf("/r/033[31m[%s]:/033[32m%s/n",inet_ntoa(addr.sin_addr),buf);
}
}
}
return 0;
}