C#中socket.receivefrom阻塞原因

问题描述

C#中socket.receivefrom读取数据时被阻塞了,但是wireshark却抓到了包。这可能是什么原因呢?代码很简单,就以下几句:IPEndPointlocalEndPoint=newIPEndPoint(IPAddress.Any,3000);SocketlocalSocket=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);localSocket.Bind(localEndPoint);byte[]revBuffer=newbyte[1024];EndPointremotePoint=(EndPoint)localEndPoint;localSocket.ReceiveFrom(revBuffer,remotePoint);执行localSocket.ReceiveFrom(revBuffer,remotePoint);时阻塞了,但是wir额shark却抓到了包,可能是什么原因呢?很疑惑。

解决方案

解决方案二:
remotePoint和抓到的包对的上吗?

时间: 2024-10-14 14:49:28

C#中socket.receivefrom阻塞原因的相关文章

java socket长连接中解决read阻塞的3个办法_java

解决的方法有3个 : 1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length 2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效. 复制代码 代码如下: Socket socket = new Socket(host,port); socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException 3 让发送端发送完数据后,关闭连接. 这个在Http的

mfc-MFC中socket TCP编程问题

问题描述 MFC中socket TCP编程问题 我在控制台用socket的tcp编程,测试完全没有问题.但是把它直接用在MFC对话框的一个按钮中,先点击服务器端的按钮,再点击客户端的按钮后,服务器端就死机了,一直就是未响应..求救("▔□▔)/谢谢! 解决方案 控制台和WinForm是不一样的. 控制台可以看成是以前的DOS,这个窗口是你独占的.所以比如你Recv的时候,可以等着,反正也没有别人来操作 但是WinForm不一样,WinForm是事件驱动的.也就是说对窗口来说,有一个事件才会有一个

java中socket connect超时的设置方法

1.首先将标志位设为Non-blocking模式,准备在非阻塞模式下调用connect函数 2.调用connect,正常情况下,因为TCP三次握手需要一些时间:而非阻塞调用只要不能立即完成就会返回错误,所以这里会返回EINPROGRESS,表示在建立连接但还没有完成. 3.在读套接口描述符集(fd_set rset)和写套接口描述符集(fd_set wset)中将当前套接口置位(用FD_ZERO().FD_SET()宏),并设置好超时时间(struct timeval *timeout) 4.调

看到关于socket非阻塞模式设置方式记录一下。

关于socket的阻塞与非阻塞模式以及它们之间的优缺点,这已经没什么可言的:我打个很简单的比方,如果你调用socket send函数时: 如果是阻塞模式下: send先比较待发送数据的长度len和套接字s的发送缓冲的长度,如果len大于s的发送缓冲区的长度,该函数返回SOCKET_ERROR:如果len小于或者等于s的发送缓冲区的长度,那么send先检查协议是否正在发送s的发送缓冲中的数据,如果是就等待协议把数据发送完,如果协议还没有开始发送s的发送缓冲中的数据或者s的发送缓冲中没有数据,那么

PHP中Socket连接及读写数据超时问题分析_php技巧

本文实例讲述了PHP中Socket连接及读写数据超时问题.分享给大家供大家参考,具体如下: 虽然PHP中对fsockopen()方法有连接socket的超时参数,但是没有类似C中的连接成功后对数据的读写超时参数设置.没关系,PHP中对stream提供了一系列的方法以防止超时 stream_set_blocking( $fp , false ) 设置数据流为阻塞模式,以防止数据没读完就退出 如果模式为 false, 给定的 socket 描述符将切换到非块模式, 如果为 true, 则切换到块模式

急求socket编程阻塞问题

问题描述 急求socket编程阻塞问题 我想做个测试,用cs模式,从客户端传一个对象给服务器,服务器修改这个对象的属性,再传回客户端.但是出了个问题.客户端运行到ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());这一行时,停住了. 服务器端也是运行到ObjectInputStream ois= new ObjectInputStream(socket.getInputStream());这一行停住了. 请

wsaewouldblock-vc socket 非阻塞 异步通信 conncect 返回值为WSAEWOULDBLOCK(10035L)

问题描述 vc socket 非阻塞 异步通信 conncect 返回值为WSAEWOULDBLOCK(10035L) vc socket 实现 非阻塞异步通信,在两PC机断开网线的情况下,客户端在connect执行完毕后,返回值不为0,通过WSAGetLastError();总是返回WSAEWOULDBLOCK(10035L)和WSAEALREADY(10037L):在连接网线的情况下,总是先返回WSAEWOULDBLOCK(10035L),然后返回WSAEISCONN(10056L):在连接

socket-Java中Socket如何发送心跳告诉服务器还活着

问题描述 Java中Socket如何发送心跳告诉服务器还活着 客户端发送的是Object(A类的实例a),如果还要发送心跳,那么心跳用什么发(字符串,对象)? 服务器端怎么分辨是有用的对象还是心跳? 解决方案 心跳检测就是消息测试用的,可以约定某个字符串为心跳检测专用字符串啊. 协商好,再处理请求数据时区分下就可以了. 解决方案二: 这个就是一个空包就可以了的,和服务器端协商好,用什么样的包头,什么样的命令码,固定就可以了

socket-VBS中Socket通过TCP协议发送数据

问题描述 VBS中Socket通过TCP协议发送数据 问题是一个接着一个: 在使用MSWINsock.Winsock通过TCP发送数据到Server的时候,提示如下错误: 代码如下: Dim sock,socket '赋值sock变量为WINSOCK的对象 Set sock = Wscript.createobject("MSWINsock.Winsock") sock.Protocol = 0 sock.RemoteHost = "10.185.59.51" so