Socket编程-UDP协议
2016-03-31 23:14
323 查看
前两天主要学习了一下tcp协议,今天有空又把udp协议也熟悉了一下。
对于tcp和udp的区别,这里大概提一下。
tcp主要是面向连接的协议,也就是在通信前需要先建立一条从服务器端到客户端的链路。tcp传输数据是数据流的形式。
udp是无连接的协议,在通信前不需要建立一条链路,但需要指定你发送的目标位置。发送的数据以数据报的形式传输。
tcp是一个可靠的传输协议。udp是不可靠的,可能会产生丢包现象,但是udp占用资源要少。
具体的区别百度上讲的很清楚。不多讲了。
由于udp是无连接的所以也就没有服务器与客户端之分了。只是发送和接受数据之分。接受数据的需要绑定自己的ip和端口号,这样别的客户端才能找到你。
接受端(可以理解为服务端):
发送端(客户端):
大概就是这样了。比Tcp的逻辑要简单点。后面还会有对于Socket封装好的类的使用。敬请关注了。
对于tcp和udp的区别,这里大概提一下。
tcp主要是面向连接的协议,也就是在通信前需要先建立一条从服务器端到客户端的链路。tcp传输数据是数据流的形式。
udp是无连接的协议,在通信前不需要建立一条链路,但需要指定你发送的目标位置。发送的数据以数据报的形式传输。
tcp是一个可靠的传输协议。udp是不可靠的,可能会产生丢包现象,但是udp占用资源要少。
具体的区别百度上讲的很清楚。不多讲了。
由于udp是无连接的所以也就没有服务器与客户端之分了。只是发送和接受数据之分。接受数据的需要绑定自己的ip和端口号,这样别的客户端才能找到你。
接受端(可以理解为服务端):
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks; namespace Socket编程_UDP协议_服务器端 { class Program { private static Socket udpServer; static void Main(string[] args) { //[1]创建Socket对象,udp数据采用数据报的形式传输 udpServer=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); //[2]绑定IP跟端口号 udpServer.Bind(new IPEndPoint(IPAddress.Parse("172.25.14.165"), 7788)); //[3]接受数据 udp是面向无连接的所以无需监听。直接通过ip和端口号,接受和发送数据报 new Thread(ReceiveMessage){IsBackground = true}.Start();//开启线程 Console.ReadLine(); } private static void ReceiveMessage() { while (true) { byte[] data = new byte[1024]; EndPoint remotePoint = new IPEndPoint(IPAddress.Any, 0); //远程的ip和端口号,即客户端 int length = udpServer.ReceiveFrom(data, ref remotePoint); //ref 指着这个方法可修改remotePoint的参数 string message = Encoding.UTF8.GetString(data); Console.WriteLine("从ip:" + (remotePoint as IPEndPoint).Address + ":" + (remotePoint as IPEndPoint).Port + "接受了数据:" + message); } } } }
发送端(客户端):
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; namespace Socket_UDP协议_客户端 { class Program { static void Main(string[] args) { //[1]创建Socket Socket udpClient = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); while (true) { //[2]发送数据 string message = Console.ReadLine(); byte[] data = new byte[1024]; data = Encoding.UTF8.GetBytes(message); //发送目标位置 EndPoint serverPoint = new IPEndPoint(IPAddress.Parse("172.25.14.165"), 7788); udpClient.SendTo(data, serverPoint); } udpClient.Close(); Console.ReadKey(); } } }
大概就是这样了。比Tcp的逻辑要简单点。后面还会有对于Socket封装好的类的使用。敬请关注了。
相关文章推荐
- 抽象类和接口的区别和联系【java】
- JAVAEE学习笔记
- Java源码学习之Integer类(三)——好玩的位运算函数
- 面向对象编程
- Python CSV Reader/Writer 例子
- an error occurred attempting install_Github_for_windows_无法安装的解决方法_
- ASP.NET发布后,功能不响应
- 03-Eclipse中maven的helloWorld
- C语言中的整数自动转换原则
- 随想录(改进的豆瓣爬行代码)
- c++第二次试验
- windows平台zend optimizer安装配置
- ubuntu server 改变phpmyadmin的默认访问路径
- 牛客网每日打卡-Java基础-20160331
- 每天一篇python:时间日期篇
- Spring
- 20145208 《Java程序设计》第5周学习总结
- C++第二次作业
- ASP.NET Core环境并运行 继续跨平台
- 一起talk C栗子吧(第一百三十四回:C语言实例--创建线程时的内存细节)