unix网络编程之udp

   #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);
   }


}

   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值