#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <pthread.h>
void *recever(void *arg)
{
int fd1 = (int)arg;
printf("fd1 = %d\n",fd1);
while (1)
{
char buf[128] = ""; char ip_str[16] = ""; struct sockaddr_in from_addr; socklen_t socklen = sizeof(from_addr); ssize_t ret = recvfrom(fd1,buf,sizeof(buf),0,(struct sockaddr *)&from_addr,&socklen); if(ret < 0) { perror("recvfrom:"); break; } inet_ntop(AF_INET,&from_addr.sin_addr.s_addr,ip_str,16); printf("%s %u %s \n",ip_str,ntohs(from_addr.sin_port),buf); }
}
void *sende*r(void *arg)
{
char ip_str[16] = "";
unsigned short port = 0;
int fd1 = (int)arg;
printf("fd1 = %d\n",fd1);
char buf[128] = ""; char *buf_p = fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0'; struct sockaddr_in dst_addr; while (1) { if(strncmp(buf,"sayto",strlen("sayto")) == 0) { bzero(&dst_addr,sizeof(dst_addr)); dst_addr.sin_family = AF_INET; sscanf(buf,"sayto %s %hu",ip_str,&port); inet_pton(AF_INET,ip_str,&dst_addr.sin_addr.s_addr); dst_addr.sin_port = htons(port); sendto(fd1,"hello",strlen("hello"),0,(struct sockaddr *)&dst_addr,sizeof(dst_addr)); continue; } else { sendto(fd1,buf,strlen(buf),0,(struct sockaddr *)&dst_addr,sizeof(dst_addr));} } }int main(int argc,char *argv[]) { int fd = socket(AF_INET,SOCK_DGRAM,0); printf("fd = %d\n",fd); struct sockaddr_in my_addr; bzero(&my_addr,sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(8080);my_addr.sin_addr.s_addr = htonl(INADDR_ANY);bind(fd,(struct sockaddr *)&my_addr,sizeof(my_addr)); pthread_t receve,send; pthread_create(&receve,NULL,recever,(void *)fd); pthread_create(&send,NULL,sender,(void *)fd); pthread_join(receve,&arg); pthread_join(send,&arg); close(fd); return 0;}
```*