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.接收/发送数据
发送数据的时候不管UDP客户端有没有相应的接收函数,它都会发出去,它并不会确保数据是否到达目的地.如图:
而且当你关闭UDP客户端,对服务器没有影响.
5.关闭服务器,清理
方法和TCP一样.
这是一种面向无连接的协议。只要服务端绑定了服务器地址,就可以等待接收数据,或者发送数据了。
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一样.
相关文章推荐
- JVM-并发-Java 内存模型
- java毕向东听课笔记11(异常体系)
- MangoDB 安装过程
- 结对编程之黄金点游戏
- IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
- RSA加解密算法java实现(已添加分段加密算法处理)
- VB.net版机房收费系统——结账功能实现(调错与优化)
- Java实验2 类的继承性
- java.lang.ExceptionInInitializerError的原因
- Getting Started with C++ in Visual Studio
- phpstorm+xdebug配置
- Asp.net WebApi版本控制
- 结对编程———黄金点游戏
- Spring的Bean组件
- 结对编程——黄金点游戏
- C# WinForm登陆窗体 限制用户名只输入字母 数字以及下划线
- [python]解决urllib.urlretrieve()下载不完全的问题
- Java NIO(3)----Selector
- JDK内置工具
- python面向对象