套接字通信输出问题

时间:2014-12-19 12:17:07

标签: c# sockets client-server ip-address tcplistener

在使用客户端服务器通信习惯套接字时,这是我的代码。

   //server partl
        try
        {
            IPAddress ipAd = IPAddress.Parse("127.0.0.1"); //use local m/c IP address, and use the same in the client

            /* Initializes the Listener */
            TcpListener myList = new TcpListener(ipAd, 8020);

            /* Start Listeneting at the specified port */
            myList.Start();


            Socket s = myList.AcceptSocket();
            Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

            byte[] b = new byte[100];
            int k = s.Receive(b);
            //Console.WriteLine("Recieved...");

            //Writes to label1
            for (int i = 0; i < k; i++)
                label1.Text = b[i].ToString();



            //ASCII endoing to use ACK.
            ASCIIEncoding asen = new ASCIIEncoding();
            s.Send(asen.GetBytes("The string was recieved by the server."));
            Console.WriteLine("\nSent Acknowledgement");

            /* clean up */
            s.Close();
            myList.Stop();


        }
        catch (Exception ex)
        {
            Console.WriteLine("Error..... " + ex.StackTrace);
        }


        //Client part

        try
        {
            TcpClient tcpclnt = new TcpClient();
            Console.WriteLine("Connecting.....");

            tcpclnt.Connect("127.0.0.1", 8020); // use the ipaddress as in the server program

             Console.WriteLine("Connected");
             Console.Write("Enter the string to be transmitted : ");

             //gets the text from textbox
            String str = textBox1.Text;
            Stream stm = tcpclnt.GetStream();

            ASCIIEncoding asen = new ASCIIEncoding();
            byte[] ba = asen.GetBytes(str);
            Console.WriteLine("Transmitting.....");

            stm.Write(ba, 0, ba.Length);

            byte[] bb = new byte[100];
            int k = stm.Read(bb, 0, 100);

            for (int i = 0; i < k; i++)
                Console.Write(Convert.ToChar(bb[i]));


            tcpclnt.Close();

        }

        catch (Exception ex)
        {
            Console.WriteLine("Error..... " + ex.StackTrace);
        }


    }

我正在使用表单在本地主机上进行通信并编写一个.cs文件,并希望将显示文本(从文本框中)从客户端标记的部分显示到服务器标记部分上的标签。

知道为什么它没有显示输出?套接字新手!!!

enter image description here

1 个答案:

答案 0 :(得分:1)

当socket接收数据而不是循环时,只需使用:

if (k > 0)
    label1.Text = Encoding.UTF8.GetString(b);

此外,您可以使用this来简单地使用TcpClient发送和接收数据,TcpClient是套接字的包装。