#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#define SIZE 300
int main(int argc,char *argv[])
{
int server_sock,r;
struct sockaddr_in server_addr,client_addr;
socklen_t len;
char buf[SIZE];
if(argc!=2)
{
printf("need port\n");
return 1;
}
server_sock = socket(AF_INET,SOCK_DGRAM,0);
memset(&server_addr,0,sizeof server_addr);
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(atoi(argv[1]));
if(-1 == bind(server_sock, (struct sockaddr*)&server_addr,sizeof(server_addr)))
{
printf(" bind error\n");
return -1;
}
while(1)
{
memset(buf,0,sizeof(buf));
r = recvfrom(server_sock,buf,sizeof(buf),0,(struct sockaddr*)&client_addr,&len);
if(r <0)
{
printf("recv error\n");
return 3;
}
buf[r]='\0';
printf("recvfrom client ip:%s, port:%d len=%d, %s\n",inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port),r,buf);
r = sendto(server_sock,buf,r,0,(struct sockaddr*)&client_addr,len);
if(r != strlen(buf))
{
printf("sendto error\n");
return 3;
}
printf("write len=%d\n",r);
}
close(server_sock);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#include<string.h>
#define SIZE 300
int main(int argc,char *argv[])
{
char buf[SIZE];
if(argc!=3)
{
printf("ip + port\n");
return 1;
}
int sock,r;
struct sockaddr_in addr;
memset(&addr,0,sizeof(addr));
socklen_t len;
sock=socket(AF_INET,SOCK_DGRAM,0);
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr(argv[1]);
addr.sin_port=htons(atoi(argv[2]));
len=sizeof addr;
while(1)
{
memset(buf,0,sizeof(buf));
printf("input:");
scanf("%s",buf);
r = sendto(sock,buf,strlen(buf),0,(struct sockaddr*)&addr,len);
if(r != strlen(buf))
{
printf("sendto error\n");
return 3;
}
printf("write len=%d\n",r);
r = recvfrom(sock,buf,sizeof(buf),0,NULL,NULL);
if(r <0)
{
printf("recv error\n");
return 3;
}
buf[r]='\0';
printf("recvfrom len=%d,%s\n",r,buf);
}
close(sock);
return 0;
}