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

时间:2013-08-13 14:28:45

标签: c# tcpclient networkstream

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

我说的问题是_serverStream.DataAvailable中的ReceiveData()始终返回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);

1 个答案:

答案 0 :(得分:2)

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

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

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

ReceiveData中,您应该从服务器端获取网络流,例如来自TcpClient的{​​{1}}来自TcpListener.AcceptTcpClient,而不是来自您用来发送数据的TcpClient