如何使用按钮从客户端发送邮件而不重置TCP客户端?

时间:2018-04-28 11:56:47

标签: c# sockets tcp tcpclient

所以我有一个简单的Windows窗体应用程序,它是一个聊天室。到目前为止一切运行良好,服务器连接正常,但我想要的是,客户端可以通过按发送按钮向服务器发送消息。以下是按下发送按钮时的代码:

private void sendButton_Click(object sender, EventArgs e) {
    try {
        TcpClient tcp = new TcpClient();
        Stream stream = tcp.GetStream();
        ASCIIEncoding asii = new ASCIIEncoding();
        byte[] by = asii.GetBytes(sendBox.Text);
        messageBox.Text += "\nTransmitting...";
        messageBox.Refresh();
        stream.Write(by, 0, by.Length);
        messageBox.Text += "\nTransmitted!";
        messageBox.Refresh();
    }
    catch (Exception eg) {
        messageBox.Text += Convert.ToString(eg);
        messageBox.Refresh();
    }

}

当我尝试发送消息时,它给了我一个错误;

  

非连接套接字上不允许进行此操作。

我非常相信这是因为我必须致电TcpClient tcp = new TcpClient();,因为凭借我有限的知识,我认为会退出当前的连接。如何保持这样的连接,但仍然使用发送按钮发送消息?

P.S如果你需要查看我的更多代码,比如服务器或连接,请告诉我。

1 个答案:

答案 0 :(得分:0)

无法看到您在任何地方连接您的tcp客户端对象。你需要在.ctor中传递ip / port,或者调用.Connect(...)方法。

或:如果您打算更密集地使用该客户端,则可以通过将其作为表单的属性或服务器/通信类的公共属性来重新使用它,以便表单可以访问它。

btw最干净的解决方案(更容易维护和测试)无论如何都要从表单中删除该tcp类,并创建一个只负责通信的类。这个类可以有一个带字符串参数的SendMessage方法,并处理创建和连接tcp客户端并发送文本。

如果那是别的:错误是什么? (在这种情况下发送有关异常的消息会很好)