4

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

我遇到的问题是_serverStream.DataAvailableinReceiveData()总是返回 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()andReceiveData()如下:

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

1 回答 1

2

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

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

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

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

于 2013-08-13T15:04:39.650 回答