【问题标题】:How to Send Messages From Client With Button Without Resetting TCP Client?如何在不重置 TCP 客户端的情况下使用按钮从客户端发送消息?
【发布时间】:2018-04-28 20:23:44
【问题描述】:

所以我有一个简单的 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 如果您需要查看我的更多代码,例如服务器或连接,请告诉我。

【问题讨论】:

    标签: c# sockets tcp tcpclient


    【解决方案1】:

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

    或者:如果您要更频繁地使用该客户端,您可以通过将其设置为表单属性或服务器/通信类的公共属性来重新使用它,以便表单可以访问它。

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

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

    【讨论】:

    • 再次连接的问题,是与服务器断开连接,表示服务器不再寻找连接。
    猜你喜欢
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2013-04-29
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多