您的位置:首页 > 理论基础 > 计算机网络

unix网络编程之udp

2013-03-08 21:12 148 查看
#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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: