当前位置: 技术问答>linux和unix
请教AIX 下UDP编程
来源: 互联网 发布时间:2015-07-15
本文导语: 请教各位:unix下UDP编程的框架是怎样的? 譬如TCP: 服务器端: socket(); bind(); listen(); accept(); ...
请教各位:unix下UDP编程的框架是怎样的?
譬如TCP:
服务器端:
socket();
bind();
listen();
accept();
read();
write();
客户端:
connect();
write();
read();
UDP方式的框架是怎样的呢?另外,查看UDP帮助手册其中sendto函数的说明与网上很多示例中有出入,譬如:很多例子中sendto函数用的是下面这个原型:
int sendto(Socket, Message, Length,Flags, To, ToLength)
int Socket;
const void *Message;
size_t Length;
int Flags;
const struct sockaddr_in *To;
size_t ToLength;
而在AIX和SCO下man sendto 中的函数原型如下:
int sendto(Socket, Message, Length,Flags, To, ToLength)
int Socket;
const void *Message;
size_t Length;
int Flags;
const struct sockaddr *To;
size_t ToLength;
可以看出二者的区别在于使用了不同的结构体sockaddr 和sockaddr_in,而二者的区别在于sockaddr_in结构体中包含端口号的描述,UDP基于不是面向连接的IP协议那么如何指定接受方的端口号呢?还是一次传送需要多个步骤(类似listen和connect)?
望各位大虾不啻执教~~ 多谢
譬如TCP:
服务器端:
socket();
bind();
listen();
accept();
read();
write();
客户端:
connect();
write();
read();
UDP方式的框架是怎样的呢?另外,查看UDP帮助手册其中sendto函数的说明与网上很多示例中有出入,譬如:很多例子中sendto函数用的是下面这个原型:
int sendto(Socket, Message, Length,Flags, To, ToLength)
int Socket;
const void *Message;
size_t Length;
int Flags;
const struct sockaddr_in *To;
size_t ToLength;
而在AIX和SCO下man sendto 中的函数原型如下:
int sendto(Socket, Message, Length,Flags, To, ToLength)
int Socket;
const void *Message;
size_t Length;
int Flags;
const struct sockaddr *To;
size_t ToLength;
可以看出二者的区别在于使用了不同的结构体sockaddr 和sockaddr_in,而二者的区别在于sockaddr_in结构体中包含端口号的描述,UDP基于不是面向连接的IP协议那么如何指定接受方的端口号呢?还是一次传送需要多个步骤(类似listen和connect)?
望各位大虾不啻执教~~ 多谢
|
UDP服务器端:
socket();
bind();
RecvFrom();
一直阻塞到客户端连接到达
...(处理请求)
SendTo();
UDP客户端:
socket();
SendTo();//数据请求
RecvFrom();//应答数据
Close();
socket();
bind();
RecvFrom();
一直阻塞到客户端连接到达
...(处理请求)
SendTo();
UDP客户端:
socket();
SendTo();//数据请求
RecvFrom();//应答数据
Close();
|
UDP不需要listen和connect。
|
也可以使用connect,参考unix网络编程 这本书