欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > C#中的Udp以及TCP 客户端发送/接收

C#中的Udp以及TCP 客户端发送/接收

2024/10/23 23:32:30 来源:https://blog.csdn.net/weixin_64532720/article/details/142771894  浏览:    关键词:C#中的Udp以及TCP 客户端发送/接收

 C#中的Udp

  // TCP   面向长连接  面向流     // UDP   面向无连接   面向数据报    :UDP如何确定当前网络中的其客户端   广播Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);socket.Bind(new IPEndPoint(IPAddress.Any, 9009));//   一个UDP客户端Task.Run(() =>{byte[] buffer = new byte[1024];EndPoint iPEndPoint = new IPEndPoint(IPAddress.Any, 0);socket.ReceiveFrom(buffer, ref iPEndPoint);Console.WriteLine(Encoding.UTF8.GetString(buffer));// iPEndPoint  指的是哪个客户端发过来的// 启动后,发送一个广播,接收到广播后   给发广播的人一个回应});// 无连接   这个消息会往这个局域网里丢// 前面不需要连接动作//socket.SendTo(new byte[] { 0x01, 0x02 }, new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666));Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);// Socket对象的配置属性socket1.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);socket1.SendTo(new byte[] { 0x01, 0x02 }, new IPEndPoint(IPAddress.Parse("255.255.255.255"), 6666));

TCP 客户端发送/接收

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 6666));// 同步处理
{//byte[] buffer, int offset, int size, SocketFlags socketFlagsstring msg = "Hello";byte[] data = Encoding.UTF8.GetBytes(msg);//for (int i = 0; i < 10; i++){socket.Send(data, 0, data.Length, SocketFlags.None);}Console.ReadLine();发送  上位机(客户端)主动请求设备(服务器)通信过程,一问一答     请求-》响应   开始接收响应byte[] buffer = new byte[1024 * 1024];// 如果没有应用层协议规定长度   ModbusTCP  请求多少个寄存器   返回的特定的长度TCP  : 面向数据流,没有明显边界    数据包中记录有效字节数    S7Console.WriteLine("开始接收");socket.Receive(buffer);// 1、有数据进来   不会就卡住       2、确保字节的长度Console.WriteLine("接收完成");//Send有没有时间间隔// 异步-》对应哪个发送的请求// 返回接收报文 
}AutoResetEvent autoResetEvent = new AutoResetEvent(false);// 异步读写
{string msg = "Hello";byte[] data = Encoding.UTF8.GetBytes(msg);var result = socket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(ret =>{// 异步方法,同步的处理try{socket.EndSend(ret);// 发送未完成,就开始接收响应byte[] buffer = new byte[1024];Console.WriteLine("开始接收");//socket.Receive(buffer);//while (true)// 需要必须拿到数据才往下走{var result = socket.BeginReceive(buffer, 0, 1024, SocketFlags.None, new AsyncCallback(DoAsync), socket);bool s = result.AsyncWaitHandle.WaitOne(500);// 等待500毫秒    以内完成接收动作  if (!s)Console.WriteLine("接收超时");//else//    break;autoResetEvent.Set();}// 耗时// 等待一个通知autoResetEvent.WaitOne();// 处理Console.WriteLine(Encoding.UTF8.GetString(buffer));}catch (Exception ex){Console.WriteLine(ex.Message);}}), socket);//result.AsyncWaitHandle.WaitOne();Console.WriteLine("开始发送");
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com