『原创』C# wm6通过udp协议和pc通讯

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

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

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

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

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

客户端界面

代码如下:

 

PPC Code
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、付费专栏及课程。

余额充值