C#WPF实现TCP服务器客户端的通信

一、TCP服务器

1、三个重要对象:Tcp监听、客户端、数据网络流 

2、设置监听,捕获客户端的连接;

3、客户端连入,开线程通过网络流接收数据;

t3.IsBackground = true;//设置线程为后台线程 

服务器主体代码如下:

        private TcpListener listener;
        private TcpClient client;
        private NetworkStream stream;
        private void button_accept_Click(object sender, RoutedEventArgs e)
        {
            if (textBoxIP.Text == "" || textBoxport.Text == "")
                MessageBox.Show("请输入IP和端口!");
            else
            {
                try
                {
                    listener = new TcpListener(IPAddress.Parse(textBoxIP.Text), Int32.Parse(textBoxport.Text));
                    listener.Start();//开始监听
                    MessageBox.Show("服务器开始监听!");
                    Thread t3 = new Thread(() => listen_connct());
                    t3.IsBackground = true;//设置t3为后台进程
                    t3.Start();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        private void listen_connct()
        {
            while (true)
            {
                if (client == null)
                {
                    client = listener.AcceptTcpClient();
                }
                stream = client.GetStream();//获取客户端网络流
                byte[] data1 = new byte[1024];
                if (stream.DataAvailable)
                    Msg_Recv(stream, data1);
                Thread.Sleep(10);
            }
        }

        private void Msg_Recv(NetworkStream st, byte[] data)
        {
            int len = st.Read(data, 0, 1024);
            string messge = Encoding.UTF8.GetString(data, 0, len);
            Dispatcher.Invoke(() => { textBoxRecv.Text = DateTime.Now + "\t" + messge; });
        }

        private void button_send_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string message = textBoxSend.Text;
                byte[] data = new byte[1024];
                data = Encoding.UTF8.GetBytes(message);
                stream.Write(data, 0, data.Length);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

二、TCP客户端 

1、主要对象:客户端、字节流

2、连接指定服务器;

3、连接成功后,开线程通过字节流接受数据;

 TCP客户端主体代码如下:

        TcpClient client;
        NetworkStream stream;
        private void button_connect_Click(object sender, RoutedEventArgs e)
        {
            if (textBoxIP.Text == "" || textBoxport.Text == "")
                MessageBox.Show("请写入IP地址和端口!");
            else
            {
                try
                {
                    client = new TcpClient();
                    client.Connect(IPAddress.Parse(textBoxIP.Text), Int32.Parse(textBoxport.Text));
                    stream = client.GetStream();                  
                    byte[] buffer = new byte[1024];
                    Thread t1 = new Thread(() => Msg_Recv(stream, buffer));
                    t1.Start();
                    t1.IsBackground = true;
                    MessageBox.Show("连接成功!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        private void Msg_Recv(NetworkStream stream, byte[] data)
        {
            while (true)
            {
                int len=stream.Read(data, 0, 1024);
                string message = Encoding.UTF8.GetString(data,0,len);
                Dispatcher.BeginInvoke(new Action(() => { textBoxRecv.Text = "接收:" + message; }));              
                Thread.Sleep(10);
            }
        }
        private void button_send_Click(object sender, RoutedEventArgs e)
        {
            string message = textBoxSend.Text;
            byte[] buffer = Encoding.UTF8.GetBytes(message);
            stream.Write(buffer, 0, buffer.Length);
        }

 效果图

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的 WPF 客户和服务 TCP 通信的示例代码: 服务代码: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; namespace Server { class Program { static void Main(string[] args) { TcpListener server = null; try { // Set the TcpListener on port 13000. Int32 port = 13000; IPAddress localAddr = IPAddress.Parse("127.0.0.1"); // TcpListener server = new TcpListener(port); server = new TcpListener(localAddr, port); // Start listening for client requests. server.Start(); // Buffer for reading data Byte[] bytes = new Byte[256]; String data = null; // Enter the listening loop. while (true) { Console.Write("Waiting for a connection... "); // Perform a blocking call to accept requests. // You could also use server.AcceptSocket() here. TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); data = null; // Get a stream object for reading and writing NetworkStream stream = client.GetStream(); int i; // Loop to receive all the data sent by the client. while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) { // Translate data bytes to a ASCII string. data = Encoding.ASCII.GetString(bytes, 0, i); Console.WriteLine("Received: {0}", data); // Process the data sent by the client. data = data.ToUpper(); byte[] msg = Encoding.ASCII.GetBytes(data); // Send back a response. stream.Write(msg, 0, msg.Length); Console.WriteLine("Sent: {0}", data); } // Shutdown and end connection client.Close(); } } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } finally { // Stop listening for new clients. server.Stop(); } Console.WriteLine("\nHit enter to continue..."); Console.Read(); } } } ``` 客户代码: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; namespace Client { class Program { static void Main(string[] args) { string server = "127.0.0.1"; int port = 13000; try { TcpClient client = new TcpClient(server, port); // Translate the passed message into ASCII and store it as a Byte array. string message = "Hello, server!"; byte[] data = Encoding.ASCII.GetBytes(message); // Get a client stream for reading and writing. // Stream stream = client.GetStream(); NetworkStream stream = client.GetStream(); // Send the message to the connected TcpServer. stream.Write(data, 0, data.Length); Console.WriteLine("Sent: {0}", message); // Receive the TcpServer.response. // Buffer to store the response bytes. data = new byte[256]; // String to store the response ASCII representation. string responseData = string.Empty; // Read the first batch of the TcpServer response bytes. int bytes = stream.Read(data, 0, data.Length); responseData = Encoding.ASCII.GetString(data, 0, bytes); Console.WriteLine("Received: {0}", responseData); // Close everything. stream.Close(); client.Close(); } catch (ArgumentNullException e) { Console.WriteLine("ArgumentNullException: {0}", e); } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } Console.WriteLine("\nHit enter to continue..."); Console.Read(); } } } ``` 这里使用了 .NET Framework 自带的 TCP 相关类,服务使用 `TcpListener` 监听客户连接,客户使用 `TcpClient` 连接服务器,使用 `NetworkStream` 进行数据通信。注意修改 IP 地址和口号以适应您的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值