C# wm6通过udp协议和pc通讯

 本文主要介绍了如何使用udp协议,多线程,让ppc和pc在同一局域网进行简单的文字收发。

我们要做好如下设置,因为是用模拟器来配置网络环境,你还必须参考下面这篇文章进行模拟器网络环境配置:点击察看

说明:我的PPC端ip是192.168.0.102,服务器端为192.168.0.100,请根据实际情况配置。

配置好后,就可以开始我们的编程了。

设计客户端(PPC 端)如下图:

客户端界面

代码如下

namespace SimpleTcp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listBoxCallback = new AddListBoxItemCallback(AddListBoxItem);
        }
       // string senddate,readdate;
       
       // NetworkStream ns;
        delegate void AddListBoxItemCallback(string text);
        AddListBoxItemCallback listBoxCallback;
        private int port = 8001;
        private UdpClient udpClient;

        private void AddListBoxItem(string text)
        {
            //如果listBoxReceive被不同的线程访问则通过委托处理;
            if (listBoxReceive.InvokeRequired)
            {
                this.Invoke(listBoxCallback, text);
            }
            else
            {
                listBoxReceive.Items.Add(text);
                listBoxReceive.SelectedIndex = listBoxReceive.Items.Count - 1;
            }
        }

        private void ReceiveData()
        {
            //在本机指定的端口接收
            udpClient = new UdpClient(port);
            IPEndPoint remote = null;
            //接收从远程主机发送过来的信息;
            while (true)
            {
                try
                {
                    //关闭udpClient时此句会产生异常
                    byte[] bytes = udpClient.Receive(ref remote);
                    string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                    AddListBoxItem(string.Format("来自{0}:{1}", remote, str));
                }
                catch
                {
                    //退出循环,结束线程
                    break;
                }
            }
        }

        /// 发送数据到远程主机
        /// </summary>
        private void sendData()
        {
            UdpClient myUdpClient = new UdpClient();
            IPAddress remoteIP=IPAddress.Parse(textBoxRemoteIP.Text);
            if ( remoteIP== null)
            {
                MessageBox.Show("远程IP格式不正确");
                return;
            }
            IPEndPoint iep = new IPEndPoint(remoteIP, port);
            byte[] bytes = System.Text.Encoding.UTF8.GetBytes(textBoxSend.Text);
            try
            {
                myUdpClient.Send(bytes, bytes.Length, iep);
               
                myUdpClient.Close();
                textBoxSend.Focus();
            }
            catch (Exception err)
            {
                MessageBox.Show(err.Message, "发送失败");
            }
            finally
            {
                myUdpClient.Close();
            }
        }


        private void button1_Click(object sender, EventArgs e)
        {
            udpClient.Close();
            Application.Exit();

        }

        private void button2_Click(object sender, EventArgs e)
        {
           
            sendData();

        }

        private void Form1_Load(object sender, EventArgs e)
        {
         
          
            //获取本机第一个可用IP地址
            IPAddress myIP = IPAddress.Parse("192.168.0.100");
            //为了在同一台机器调试,此IP也作为默认远程IP
            textBoxRemoteIP.Text = myIP.ToString();
            //创建一个线程接收远程主机发来的信息
            Thread myThread = new Thread(new ThreadStart(ReceiveData));
            //将线程设为后台运行
            myThread.IsBackground = true;
            myThread.Start();
            textBoxSend.Focus();

        }
    }
}

客户端就ok了。

 

下面我们写服务器端,代码和客户端基本一致,就不赘述了,服务器端设计界面如下:

最终效果如下图:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值