我发送的是这样的:
public void Send(string s)
{
char[] chars = s.ToCharArray();
byte[] bytes = chars.CharToByte();
nstream.Write(bytes, 0, bytes.Length);
nstream.Flush();
}
并在像这样的后台线程中接收
void CheckIncoming(object dd)
{
RecievedDelegate d = (RecievedDelegate)dd;
try
{
while (true)
{
List<byte> bytelist = new List<byte>();
System.Threading.Thread.Sleep(1000);
int ssss;
ssss = nstream.ReadByte();
if (ssss > 1)
{
System.Diagnostics.Debugger.Break();
}
if (bytelist.Count != 0)
{
d.Invoke(bytelist.ToArray());
}
}
}
catch (Exception exp)
{
MSGBOX("ERROR:\n" + exp.Message);
}
}
ssss int永远不会> 1 什么事发生在这里???
答案 0 :(得分:2)
NetworkStream.Flush()
实际上没有效果:
Flush方法实现Stream .. ::。Flush方法;但是,因为NetworkStream没有缓冲,所以它对网络流没有影响[sic]。调用Flush方法不会抛出异常
正在发送多少数据? 如果您没有发送足够的数据,它可能会在网络级别保持缓冲,直到您关闭流或写入更多数据。
如果您要发送小块数据并且需要低延迟,请参阅TcpClient.NoDelay
属性以获取禁用此功能的方法。
答案 1 :(得分:0)
您应该将返回值的检查更改为if (ssss >= 0)
。
如果成功读取一个字节(source),则ReadByte返回大于或等于0的值。
详细说明Marc的评论:如何创建nstream?也许有一个基础类不会刷新。
答案 2 :(得分:0)
好吧,我正在创建一个TcpClient,并使用GetStream();获取NetworkStream