我正在尝试从套接字读取网络流。我知道套接字的地址族是InterNetwork,套接字类型是流,协议类型是IP。从套接字读取网络流
我有一个IPEndPoint,它由IP地址和端口组成,我尝试从中读取。
NetworkStream myNetworkStream;
Socket socket;
IPEndPoint maxPort = new IPEndPoint(IPAddress.Parse("x.x.x.x"), xxxx);
socket =
new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
socket.Connect(maxPort);
myNetworkStream = new NetworkStream(socket);
while (myNetworkStream.DataAvailable == false)
{
Thread.Sleep(1);
}
byte[] buffer = new byte[1024];
int offset = 0;
int count = 1024;
myNetworkStream.Read(buffer, offset, count);
Console.ReadLine();
我知道数据是可用的(我写我自己的现有应用程序的版本和现在用的源代码作为参考),但真/假数据可用属性始终保持假的,我从来不打我到Console.ReadLine()。
我在这里做错了什么?
此处的文档:http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.dataavailable.aspx使用do ... while循环。代码的结构表明您必须在检查DataAvailable属性之前尝试Read()。但我不是100%肯定的,但没有明确说明。它看起来像它正在检查你最后一次Read()的结果,以确定是否有数据返回。当然,我可能会离开基地。我从来没有遇到过这个问题,所以这只是一个猜测(这就是为什么它是一个评论,而不是一个答案) – David
谢谢,虽然它挂在阅读,并没有进一步,但我很欣赏反馈!我会深入研究文档,因为我真的很喜欢这个问题,如果/当我弄明白的话,我会评论它!这是除非一些不错的开发人员在下面发布答案! – JMK