您当前的位置:首页 > 互联网教程

C# socket receive方法

发布时间:2025-05-19 17:21:04    发布人:远客网络

C# socket receive方法

一、C# socket receive方法

1、结论:C#的Receive方法是用于从面向连接和无连接套接字中读取数据的关键工具,它将数据读入传入的缓冲区并返回读取的字节数。方法行为取决于所使用的套接字类型和连接状态。

2、在面向连接的套接字中,Receive在调用Connect或Accept建立连接后读取远程主机发送的数据。如果没有数据,Receive会阻塞直到数据可用,或者在超时后抛出SocketException。如果接收的数据达到缓冲区大小,Receive会读取所有数据,直到连接关闭并接收完毕。

3、对于无连接套接字,Receive从目标地址读取第一个排队的数据报,但数据报过大可能导致部分数据丢失。ReceiveFrom方法则允许接收来自任何主机的数据。

4、无论哪种情况,Receive都依赖于Available属性来检查是否有数据可读,如果没有,它会立即完成并可能抛出异常。发送与接收测试中,Send后通过Receive获取服务器的回复,任何SocketException会被捕获并记录错误信息。

5、因此,Receive方法是C#编程中实现数据通信时必不可少的一部分,理解其行为和适用场景对正确使用至关重要。

二、C# socket 如何获取收到数据的事件

1、Socket有个BeginReceive方法,用这个方法来接收数据,

2、这个函数有个参数是个委托AsyncCallBack,是个回调函数..

3、(我是一楼)补充:Socket还有个方法是BeginReveiceFrom是用于UDP协议的.用法与BeginReceive相同,而且UDP不监听的理解是错误的.UDP同样也监听.并不是说只有在TCP中调用了Socket的Listen函数才是监听.BeginReveiceFrom其实已经完成了监听过程

三、C#中Socket类ReceiveFrom函数读数据时卡死

1、receiveFrom方法读取数据的时候如果缓冲区不够大则会分好几次读取。

2、通过判断socket.Available来判断上次读取的数据还有多少未读取。如果Available==0则本次读取完毕

3、可以将接收方法封装在一个类中(SocketClient),实例化类后在单个线程中运行。

4、//如果发送的字节已经完毕。则重置接收字符串,休眠线程重新等待数据

5、//重置前首先尝试写个事件或委托将这次接收的receiveStr传递出去

6、OnDataReceived(receiveStr);//这个事件可以自己去补充

7、System.Threading.Thread.Sleep(1);

8、intrecv=mySocket.ReceiveFrom((data,refRemote));//Remote为EndPoint对象

9、将该批次数据保存在receiveStr中

10、receiveStr+=Encoding.ASCII.GetString(data,0,recv);

11、//接收的类中实例化上面的类并订阅

12、SocketClientxxx=newSocketClient();

13、xxx.OnDataReceived+=newHander(this.DataReceived);

14、voidDataReceived(stringreceive)

15、Console.WriteLine("接收到了收据:"+receive)