#include <iostream>
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;
int main(int argc, char* argv[])
{
short port = 12345;
if(argc > 1)
port = atoi(argv[1]);
int ss = socket(AF_INET,SOCK_DGRAM, 0);
if(ss < 0)
{
cout<<"socket error"<<endl;
return -1;
}
sockaddr_in si;
socklen_t len = sizeof(si);
si.sin_family = AF_INET;
si.sin_port = htons(port);
si.sin_addr.s_addr = 0;
int r = bind(ss, (sockaddr*)&si, len);
if(r < 0)
{
cout<<"bind error"<<endl;
close(ss);
return -1;
}
char cmd;
sockaddr_in caddr;
char ip[100];
char msg[1000];
for(;;)
{
cout<<"input a cmd : r/a/q/s"<<endl;
cin>>cmd;
switch(cmd)
{
case 'r':
r = recvfrom(ss, msg, 1000, 0, (sockaddr*)&caddr, &len);
msg[r]= '\0';
port = ntohs(caddr.sin_port);
inet_ntop(AF_INET, &caddr.sin_addr.s_addr, ip, 100);
cout<<ip<<" @ "<<port<<" "<<msg<<endl;
break;
case 'a':
cin.getline(msg, 1000);
sendto(ss, msg, strlen(msg), 0, (sockaddr*)&caddr, len);
break;
case 's':
cout<<"input ip port:";
cin>>ip>>port;
cin.getline(msg, 1000);
caddr.sin_port = htons(port);
inet_pton(AF_INET, ip, &caddr.sin_addr.s_addr);
caddr.sin_family = AF_INET;
sendto(ss, msg, strlen(msg), 0, (sockaddr*)&caddr, len);
break;
case 'q':
exit(0);
}
}
}
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;
int main(int argc, char* argv[])
{
short port = 12345;
if(argc > 1)
port = atoi(argv[1]);
int ss = socket(AF_INET,SOCK_DGRAM, 0);
if(ss < 0)
{
cout<<"socket error"<<endl;
return -1;
}
sockaddr_in si;
socklen_t len = sizeof(si);
si.sin_family = AF_INET;
si.sin_port = htons(port);
si.sin_addr.s_addr = 0;
int r = bind(ss, (sockaddr*)&si, len);
if(r < 0)
{
cout<<"bind error"<<endl;
close(ss);
return -1;
}
char cmd;
sockaddr_in caddr;
char ip[100];
char msg[1000];
for(;;)
{
cout<<"input a cmd : r/a/q/s"<<endl;
cin>>cmd;
switch(cmd)
{
case 'r':
r = recvfrom(ss, msg, 1000, 0, (sockaddr*)&caddr, &len);
msg[r]= '\0';
port = ntohs(caddr.sin_port);
inet_ntop(AF_INET, &caddr.sin_addr.s_addr, ip, 100);
cout<<ip<<" @ "<<port<<" "<<msg<<endl;
break;
case 'a':
cin.getline(msg, 1000);
sendto(ss, msg, strlen(msg), 0, (sockaddr*)&caddr, len);
break;
case 's':
cout<<"input ip port:";
cin>>ip>>port;
cin.getline(msg, 1000);
caddr.sin_port = htons(port);
inet_pton(AF_INET, ip, &caddr.sin_addr.s_addr);
caddr.sin_family = AF_INET;
sendto(ss, msg, strlen(msg), 0, (sockaddr*)&caddr, len);
break;
case 'q':
exit(0);
}
}
}