C# TCP与UDP

Http使用端口是80

SMTP使用端口是25

TCP是首选协议,它提供有保证的传输、错误校正和缓冲。

System.Net.Sockets. TcpClient类封装了TCP链接,提供属性字段来控制链接,包括缓冲、缓冲区的大小和超时。

TCP提供很多功能来确保数据的传输,它还提供了错误校正以及当数据丢失或数据包损坏时重新传输的功能。TCP可缓冲传入和传出的数据,还保证在传输过程中,在把数据包传输给应用程序之前重组杂乱的一系列数据包。

发送端

1TcpClient tcpClient = new TcpClient(textBox1.Text, Int32.Parse(textBox2.Text)); 2 NetworkStream ns = tcpClient.GetStream(); 3 FileStream fs = File.Open("Send.txt", FileMode.Open); 4 5 int data = fs.ReadByte(); 6 while (data != -1) 7 { 8 ns.WriteByte((byte)data); 9 data = fs.ReadByte(); 10 } 11 fs.Close(); 12 ns.Close(); 13 tcpClient.Close();

  接受端

1IPAddress localAddr = IPAddress.Parse("127.0.0.1"); 2 Int32 port = 2112; 3 System.Net.Sockets.TcpListener tcpListener = new TcpListener(localAddr, port); 4 tcpListener.Start(); 5 6 TcpClient tcpClient = tcpListener.AcceptTcpClient(); 7 8 NetworkStream ns = tcpClient.GetStream(); 9 StreamReader sr = new StreamReader(ns); 10 string result = sr.ReadToEnd(); 11 Invoke(new UpdateDisplayDelegate(UpdateDisplay), new object[] { result }); 12 tcpClient.Close(); 13 tcpListener.Stop();

UDP, 通常在速度和性能要求比可靠性更高的应用程序中使用UDP,如视频流。

UDP是一个无连接的协议。

看别人的,调试,有点小问题,就当参考。

客户

1//System.Net.Sockets.UdpClient udpClient = new UdpClient(); 2 //string sendMsg = "Hello Echo Server"; 3 //byte[] sendBytes = Encoding.ASCII.GetBytes(sendMsg); 4 //udpClient.Send(sendBytes, sendBytes.Length, "UdpTest.net", 7); 5 //IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 9093); 6 //byte[] rcvBytes = udpClient.Receive(ref endPoint); 7 //string rcvMessage = Encoding.ASCII.GetString(rcvBytes, 0, rcvBytes.Length); 8 //Console.WriteLine(rcvMessage); 9 byte[] data = new byte[1024]; 10 string intput, stringData; 11 IPEndPoint iPEnd = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9095); 12 Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 13 string welcome = "Hello,Where are you there"; 14 data = Encoding.ASCII.GetBytes(welcome); 15 server.SendTo(data, data.Length, SocketFlags.None, iPEnd);//将数据发送到指定的终结点 16 17 IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); 18 EndPoint Remote = (EndPoint)sender; 19 data = new byte[1024]; 20 int recv = server.ReceiveFrom(data, ref Remote); 21 Console.WriteLine("Message received from{0}", Remote.ToString()); 22 23 while (true) 24 { 25 intput = Console.ReadLine(); 26 if (intput == "text") 27 { 28 break; 29 } 30 server.SendTo(Encoding.ASCII.GetBytes(intput), Remote);//将数据发送到指定的终结点Remote 31 data = new byte[1024]; 32 recv = server.ReceiveFrom(data, ref Remote);//从Remote接受数据 33 stringData = Encoding.ASCII.GetString(data, 0, data.Length); 34 Console.WriteLine(stringData); 35 } 36 37 Console.WriteLine("stop"); 38 server.Close();

服务

1int recv; 2 byte[] data = new byte[1024]; 3 IPEndPoint ipEp = new IPEndPoint(IPAddress.Any, 9095); 4 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 5 socket.Bind(ipEp); 6 Console.WriteLine("wait...."); 7 8 IPEndPoint sender = new IPEndPoint(IPAddress.Any, 9095); 9 EndPoint Remote = (EndPoint)(sender); 10 recv = socket.ReceiveFrom(data, ref Remote); 11 Console.WriteLine("Message receive from {0}", Remote.ToString()); 12 13 string welcome = "Welcome to my server"; 14 data = Encoding.ASCII.GetBytes(welcome); 15 socket.SendTo(data, data.Length, SocketFlags.None, Remote); 16 while (true) 17 { 18 data = new byte[1024]; 19 recv = socket.ReceiveFrom(data, ref Remote); 20 socket.SendTo(data, recv, SocketFlags.None, Remote); 21 }

TCP与UDP

在后台都用到套接字Socket,当准确度要求高的时候,用TCP。若追求性能和速度,而且对准确度要求不高时,用UDP。

 TCP协议和UDP协议连接过程的区别如下: 
  1.基于连接与无连接; 
  2.对系统资源的要求(TCP较多,UDP少); 
  3.UDP程序结构较简单; 
  4.TCP数据传输采用流模式与UDP则采用数据报模式 ; 
  5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

KVM调整cpu和内存

一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid