jjzjj

networkStream

全部标签

c# - 我应该将 StreamReader/Writer 与 NetworkStream 一起用于 C# 服务器/客户端吗?

我正在为一个项目构建一个基于客户端/服务器的游戏(感觉完全超出了我的深度)。我一直在使用TCPclient和多线程套接字服务器。目前一切正常,但我一直在使用StreamReader和StreamWriter在客户端和服务器之间进行通信。我经常看到这样的接收数据的例子:byte[]data=newbyte[1024];intrecv=sock.ReceiveFrom(data,refep);stringstringData=Encoding.ASCII.GetString(data,0,recv);这个用于发送:byte[]data=Encoding.ASCII.GetBytes("Th

c# - NetworkStream.CanRead 返回 true 但缓冲区不返回任何值

我有一个dowhile循环,它从NetworkStream对象中读取缓冲区while条件是networkStream.CanRead所以只要它可以读取,它就应该继续从缓冲区读取。唯一的问题是当我从缓冲区读取并转换为字符串时,里面什么也没有。即它是空的。为什么会这样?这是一个ASP.NET(VS2005)应用程序@dtb代码信息:我正在传递NetworkStream对象networkStream//between2functionsinaloop{SendMessage(networkStream,message);ReadMessage(networkStream);}有趣的是,如果它

c# - 防止 TcpClient 的 NetworkStream ReadTimeout 关闭套接字

我有一个类通过TCP与设备通信。我发送命令,然后在TcpClient的GetStream()上发出stream.Read(reply,0,1)。我读出每个字节,然后将读取的字节组合成一个字符串,并将该字符串与终止字符串进行比较,让我知道何时停止读取。设备软件存在一些缺陷,导致终止字符串并不总是发送。我想以适当的方式处理这个问题,并用一段时间来确定是否应该停止读取。如果我将stream.ReadTimeout设置为-1以外的值,那么当超过此超时时套接字将关闭,这是我不希望的到。如果我将stream.BeginRead(..)与stream.ReadTimeout=-1一起使用,那么我将在

c# - 如何确保从 NetworkStream 读取所有数据

当DataAvailable为false时,是否确定所有数据都从NetworkStream中读取?或者数据的发送方是否必须先发送数据的长度。并且我必须读取直到读取了发送方指定的字节数?示例:privateByte[]ReadStream(NetworkStreamns){varbl=newList();varreceivedBytes=newByte[128];while(ns.DataAvailable){varbytesRead=ns.Read(receivedBytes,0,receivedBytes.Length);if(bytesRead==receivedBytes.Len

c# - 两个并发的 NetworkStream.BeginWrite 调用会发生什么?

我的Sender类有两个方法:publicvoidSendMessage(OutgoingMessagemsg){try{stream.BeginWrite(msg.TcpData,0,16,messageSentCallback,msg);}catch{//...}}privatevoidmessageSentCallback(IAsyncResultresult){stream.EndWrite(result);if(result.IsCompleted)onDataSent(result.AsyncStateasOutgoingMessage);}程序的其他部分可以调用(如果它们

c# - 将完整的消息写入 NetworkStream 或写入每条消息的各个部分是个好主意吗?

我想知道将完整消息写入NetworkStream是否比在多个Write调用中写入消息的每个部分更好。例如,将消息完整地写成这样......NetworkStreamns=tcpClient.GetStream();byte[]message=Encoding.ASCII.GetBytes("Thisisamessage.");ns.Write(message,0,message.Length);...比这样写更好...NetworkStreamns=tcpClient.GetStream();byte[]message1=Encoding.ASCII.GetBytes("This");

c# - 为什么 NetworkStream.Read 这么慢?

我知道,这里已经有很多类似的问题,但我没有找到让它更快的解决方案或者为什么它这么慢的原因?我们在C#.NET中有一个应用程序需要通过TCP与响应同一TCP流(全部以字节为单位)的设备进行通信。消息的发送速度非常快(大约20毫秒),但是当我们使用NetworkStream.Read()方法(或类似的Socket.Receive())从TCP套接字读取数据时,大约需要600毫秒。我通过在Read方法之前启动秒表并在Read之后立即停止来获得这个数字。我还使用Wireshark记录流量,在那里我看到通信进行得非常快(使用TCPNoDelay和TCPAckFrequency注册表黑客)但是我看

c# - TcpClient 的 NetworkStream 什么时候完成一次读操作?

我正在从事一个涉及通过TCP和GoogleProtocolBuffer进行客户端服务器通信的项目。在客户端,我基本上使用NetworkStream.Read()来阻止通过字节数组缓冲区从服务器读取。根据MSDN文档,Thismethodreadsdataintothebufferparameterandreturnsthenumberofbytessuccessfullyread.Ifnodataisavailableforreading,theReadmethodreturns0.TheReadoperationreadsasmuchdataasisavailable,uptothe

C# NetworkStream - 在读取时区分关闭的套接字和 0 字节数组

[已解决,问题是基于不正确的假设]在使用TCP时,我遇到了NetworkStream.Read在两种不同情况下返回值0的问题,我很难区分这两种情况。一些背景知识-我有一个有效的客户端-服务器解决方案,使用长度前缀消息通过TCP进行通信。然而,由于大多数通信(除了一些初始消息交换)发生在客户端与服务器之间,服务器没有很好的方法来知道客户端是否仍然连接。找出这一点的一种方法是不时向客户发送一些东西,这就是我决定要做的。我知道我可以在我的协议(protocol)中添加专用的“ping”消息,并在客户端中简单地忽略它,但我也在测试其他可能性。我试过的一件事是像这样向客户端发送一个空字节数组:n

TcpClient/NetworkStream 未检测到断开连接

我使用TcpClient和NetworkStream为我们的游戏创建了一个简单的持久套接字连接。正常连接、发送消息和断开连接(退出应用程序/服务器关闭/等)都没有问题。但是,我遇到了一些问题,在某些情况下,客户端没有检测到与服务器的断开连接。我对此进行测试的最简单方法是拔掉wifi盒上的网络电缆,或将手机设置为飞行模式,但它发生在游戏中,否则应该是稳定的wifi。通过NetworkStream等文档,它说检测断开连接的唯一方法是尝试写入套接字。很公平,除了,当我尝试时,写入通过,好像没有任何问题。我可以像这样写多条消息,一切似乎都很好。只有当我重新插入电缆时,它才会发现它已断开连接(所