如何在服务器表单文本框中显示数据?

时间:2015-06-18 07:23:16

标签: c# sockets

我运行我的服务器succsessfully,但当我打印我以前在控制台屏幕上打印的数据,以解决我正在发生的事情,我想在文本框上显示所有,但它不显示,当我关闭连接时客户端显示所有信息。为什么会这样?

这是我的代码

  public void GetData()
  {
    Form1 f = new Form1();
    string ipadd = getip();

    IPAddress ipAd = IPAddress.Parse("192.168.0.15"); //use local m/c IP   address, and use the same in the client
    // IPAddress ip = IPAddress.Parse(ipadd);
    txtip.Text = ipAd.ToString();
    txtport.Text = "3030";
    /* Initializes the Listener */
    TcpListener myList = new TcpListener(ipAd, 3030);

    /* Start Listeneting at the specified port */

    myList.Start();

    txtdata.Text = "The server is running at port 3030...";
    txtdata.Text = txtdata.Text + Environment.NewLine + "The local End point  is :" + myList.LocalEndpoint;
    txtdata.Text = txtdata.Text + Environment.NewLine + "Waiting for a   connection.....";



    Socket s = myList.AcceptSocket();

     txtdata.Text = txtdata.Text + Environment.NewLine +"Connection accepted from " + s.RemoteEndPoint;
    // txtdata.Text = "Connection accepted from " + s.RemoteEndPoint;

    }

当我在控制台上写数据时看看上面的代码,但我想在txtdata(文本框)上打印,但它不打印,直到客户端连接关闭。

1 个答案:

答案 0 :(得分:0)

您正在阻止UI线程。在您的方法完成执行之前,UI无法更新,因为它只能从UI线程更新。

理想情况下,您希望使用异步I / O而不是阻止UI线程。或者,在最坏的情况下,使用单独的线程来处理通信。

var listener = new TcpListener(IPAddress.Any, 24221);
listener.Start();

txtdata.Text = "The server is running...";

var client = await listener.AcceptTcpClientAsync();

此代码避免阻塞UI线程 - 相反,UI线程可以自由地执行它需要做的任何事情,直到客户端连接,这将导致代码执行在await点继续,再次打开UI线程。

此外,尝试使用可用的最高抽象 - 在这种情况下,AcceptTcpClient而不是AcceptSocket。当TcpClient为您提供简单的基于流的界面时,无需使用原始套接字。