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);
}
}
}
#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);
}
}
}
相关文章推荐
- Unix网络编程二:传输层:TCP、UDP、SCTP
- Unix网络编程学习笔记之第2章 TCP和UDP
- UNIX网络编程——TCP输出,UDP输出
- UNIX网络编程——UDP 的connect函数(改进版)
- Unix网络编程 卷1 第11章:名字与地址转换(udp_client_connect_connect)
- UNIX网络编程——TCP输出,UDP输出
- UNIX网络编程——UDP 的connect函数(改进版)
- Unix网络编程之UDP实例
- UNIX网络编程学习笔记(1) 传输层:TCP UDP STCP
- 《unix网络编程》(19)使用select的TCP和UDP回射程序
- UNIX网络编程——TCP输出,UDP输出
- Unix网络编程 卷1 第8章: 基本UDP套接字编程(概述及recvfrom/sendto函数)
- 简单的UDP回射服务程序与客户程序(修改自Unix网络编程一书)
- 《unix网络编程》(18)基本UDP套接字 简单客户服务器回射程序及改进
- 【UNIX网络编程】第二期 传输层:TCP、UDP、SCTP
- UNIX网络编程——UDP缺乏流量控制(改进版)
- Unix网络编程之UDP常见缺陷与实例
- UNIX网络编程——UDP缺乏流量控制(改进版)
- 《UNIX网络编程》UDP网络编程基础
- unix网络编程之简介和运输层TCP/UDP