您的位置:首页 > 编程语言

socket编程UDP服务器原理简介

2016-04-09 18:55 92 查看
UDP全名是:User Datagram Protocol 用户数据报协议

这是一种面向无连接的协议。只要服务端绑定了服务器地址,就可以等待接收数据,或者发送数据了。

UDP:

1.提供无连接服务。客户端向服务端发送数据时不必先建立连接。客户端创建一个套接字并向服务器发送一个数据报,然后客户端可以立即用这个套接字向另外一个服务器发送其它数据

2.不能确保UDP数据报最终到达目的地。UDP对接收的数据报不发生确认,发送端不知道数据是否被正确接收,也不会重发数据。

3.UDP传输数据较TCP快,占用系统资源少.

创建UDP服务器步骤:

初始化套接字(WSAStartup)–>创建UDP套接字(socket)–>绑定服务器地址(bind)–>接收/发送数据(recvfrom/sendto)–>关闭服务器,清理(closesocket,WSACleanup)

从步骤上来看很明显的,UDP不需要创建一个链接,只需要打开服务器等待数据的到来就行。

1.初始化套接字

方法和TCP的一样

2.创建套接字

把传输类型改为SOCK_DGRAM(数据报),协议改为IPPROTO_UDP

3.绑定服务器地址

方法和TCP一样

4.接收/发送数据

//成功返回接收到的字节数,失败返回SOCKET_ERROR
int recvfrom(
SOCKET s,     //服务器socket
char FAR* buf,//数据缓存区
int len,      //缓存区长度
int flags,    //设为0
struct sockaddr FAR* from,//UDP客户端的地址
int FAR* fromlen          //地址长度,预先计算好(sizeof(客户端地址)),否则会出现未知指针错误
);

//成功返回发送的字节数,失败返回SOCKET_ERROR
int sendto(
SOCKET s,    //服务器socket
const char FAR* buf, //要发送的数据
int len,             //数据长度
int flags,           //设为0
const struct sockaddr FAR* to,//UDP客户端地址
int tolen                     //地址长度
);


发送数据的时候不管UDP客户端有没有相应的接收函数,它都会发出去,它并不会确保数据是否到达目的地.如图:



而且当你关闭UDP客户端,对服务器没有影响.

5.关闭服务器,清理

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