如何理解客户端是否连接到c#中的服务器?

如何理解客户端是否连接到c#中的服务器?,c#,sockets,networking,network-programming,C#,Sockets,Networking,Network Programming,我正在尝试使用套接字在客户端和服务器之间建立连接。我有一个图形用户界面。这是我的密码: 这是服务器的代码,它从gui中的文本框中获取端口号,单击开始按钮时,将创建一个套接字 Thread thrAccept; Socket server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Socket n; private void button_start_listenin

我正在尝试使用套接字在客户端和服务器之间建立连接。我有一个图形用户界面。这是我的密码:

这是服务器的代码,它从gui中的文本框中获取端口号,单击开始按钮时,将创建一个套接字

Thread thrAccept;
Socket server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket n;

private void button_start_listening_Click(object sender, EventArgs e)
{
    richTextBox_server_activity_log.AppendText("Server started. Waiting for clients... \n");
    button_start_listening.Enabled = false;
    server_socket.Bind(new IPEndPoint(IPAddress.Any, Convert.ToInt32(textbox_port_no.Text)));

    server_socket.Listen(100);
    thrAccept = new Thread(new ThreadStart(Accept));
    thrAccept.Start();

}

private void Accept()
{
    n = server_socket.Accept();            
}
对于客户端,我使用两个文本框输入用户的ip和端口号,然后单击connect按钮,为了建立连接,我使用以下代码:

c.Connect(ipText.Text, Convert.ToInt32(portText.Text)); //c is a socket
我的问题是,当建立连接时,我想在服务器的GUI中打印类似“已连接客户端”的内容。但如何让服务器知道客户端已连接


谢谢

也许是这样的

   private void Accept()
    {
        try {
            n = server_socket.Accept();
            richTextBox_server_activity_log.AppendText("Connection Established...");
        } catch (Exception ex) {
            richTextBox_server_activity_log.AppendText("Failed to Connect...");
        }
    }

你的问题是什么?
Socket.Accept
方法阻塞,直到它可以接受来自远程主机的连接。因此,在
Accept
方法的末尾,您可以说“客户端已连接”。。因为在那一点上它已经接受了一个连接。@SimonWhitehead谢谢,我不知道它会阻塞,直到它接受了一个连接,我会尝试它。这就是为什么你必须把它放在它自己的线程中。。否则您的UI将没有响应。@SimonWhitehead还有一个简单的问题:我在客户端的GUI中还有一个文本框,客户端可以输入用户名。如何将此用户名参数传递给服务器,以便服务器也显示连接的客户端的用户名?我将客户机和服务器GUI放在单独的项目中,您不能在一次突发事件中使用。最初,套接字将接受连接,该连接随远程主机IP/主机名等一起提供。之后,您需要向客户端发送请求以获取其用户名。谢谢,但不是Console。Writeline,我在gui的RichTextBox中处理消息。此方法在单独的线程中运行。像这样使用RichTextBox可能会引发跨线程异常。