gpt4 book ai didi

c# - 使用网络流发送和接收数据 C#

转载 作者:行者123 更新时间:2023-11-30 12:29:35 25 4
gpt4 key购买 nike

您好,我正在尝试从客户端向服务器发送一个字符串。它不起作用,所以我试图通过在同一台机器上发送数据和接收数据来测试以下功能。

我遇到的问题是 ReceiveData() 中的 _serverStream.DataAvailable 总是返回 false。如何检查这两个功能是否正常工作? _serverStream 是否无法发送/接收数据?

    public void SendData(string dataToSend)
{
if (string.IsNullOrEmpty(dataToSend))
return;

_serverStream = _serverClient.GetStream();
byte[] outStream = Encoding.UTF8.GetBytes(dataToSend);
_serverStream.Write(outStream, 0, outStream.Length);
//_serverStream.Flush();
}

public string ReceiveData()
{

StringBuilder message = new StringBuilder();
_serverStream = _serverClient.GetStream();
_serverStream.ReadTimeout = 100;
while (true)
{

if (_serverStream.DataAvailable)
{
int read = _serverStream.ReadByte();
if (read > 0)
{
message.Append((char)read);
}
else
{
break;
}
}
else if (message.ToString().Length > 0)
{
break;
}
}
return message.ToString();
}

我调用 SendData()ReceiveData() 如下:

    tcpclient.SendData(username);
string test = tcpclient.ReceiveData();
MessageBox.Show(test);

最佳答案

虽然它没有显示在您的代码中,但我猜测 _serverClient 是一个 TcpClient。

在这两种方法中,您都从相同的 _serverClient 获取网络流,因此您访问的是完全相同 的网络流。您似乎希望在 SendData 中将数据写入网络流时,您应该能够在 ReceiveData 中读取相同的数据,这是不正确的。

当您将数据写入网络流时,它实际上是通过网络发送的——无法从同一网络流中读取数据。您只能读取从远程端点接收 的数据。换句话说,除非您有一个远程端点向您发送回数据,否则您将没有任何 DataAvailable 可供读取。

ReceiveData中,您应该从服务器端获取网络流,例如来自通过调用 TcpListener.AcceptTcpClient 返回的 TcpClient,而不是来自用于发送数据的同一 TcpClient

关于c# - 使用网络流发送和接收数据 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com