通信协议_C#自定义网口通信

相关概念
  • socket:是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。
  • 网口:用于连接设备和网络的端口
  • Nuget包:System.Net.Sockets
  • 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
  • 客户端请求:由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。客户端指出服务器端套接字的地址和端口号,向服务器端接字提出连接请求。
  • 连接确认:当服务器端套接字监听到或者接收到客户端套接字的连接请求,响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述发送给客户端。而服务器端套接字继续监听,接收其他客户请求。
  • 常见的网口类型包括RJ-45接口、RJ-11接口、BNC接口、Console接口、SC光纤接口、FDDI接口、AUI接口等。
  • RJ-45接口是最常见的以太网接口类型,广泛应用于计算机、交换机、路由器等网络设备之间。RJ-45接口具有8根引脚,每根引脚都有明确的定义和用途,支持高速数据传输,传输速率通常为10Mbps、100Mbps、1000Mbps。
Demo

主动接收并回传Demo

	      	 	//声明socket对象
  		  	    Socket socket = null;

        public Window1()
        {
            InitializeComponent();

            	//实例化对象,地址族,套接字类型,协议
            	socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
        }

        	   	//连接客户端按钮事件
        	private void Button_Click(object sender, RoutedEventArgs e)
        {
            	//测试连接是否有异常
            try {
                //连接服务器,服务器加端口号
                socket.Connect("192.168.73.8", 6666);
                MessageBox.Show("服务器连接成功");
            }
            catch (Exception ex){
                //异常错误消息提示
                MessageBox.Show(ex.Message,"错误提示");
            }
        }
        
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            //定义发送数据的数组
            string txt = "发送测试?";
            
            //发送数据
            byte[]data=Encoding.UTF8.GetBytes(txt);
            
            //发送数据 
            socket.Send(data);
            
            MessageBox.Show("数据发送成功");
            //初始化接收数组
            byte[] respBytes = new byte[500];
            
            //接收发送的数组(此处默认客户端会自动回传)
            socket.Receive(respBytes);
            
            //将接收到的数组解码
            string msg=Encoding.UTF8.GetString(respBytes);
            this.messageTXT.Text = msg;
        }
    }
}

被动接收Demo

       	   	 //连接客户端按钮事件
  		     private void Button_Click(object sender, RoutedEventArgs e)
       {
             //测试连接是否有异常
             try {
             //连接服务器,服务器加端口号
             socket.Connect("192.168.57.8", 6666);
             //在异步线程中处理接收事件
               Task.Run(() =>
               {
                   while (true)
                   {   //创建接收回传的数组
                       byte[] respBytes = new byte[1024];
                       //将接收到的内容放入数组中
                       socket.Receive(respBytes);
                       //解码
                       string msg = Encoding.ASCII.GetString(respBytes);
                       //文本框显示 
                       //包裹于UI主线程
                       this.Dispatcher.Invoke(() =>
                       {
                           this.messageTXT.Text = msg;
                       });
                   }
               });
               			  MessageBox.Show("服务器连接成功");
           }
           catch (Exception ex){
                          MessageBox.Show(ex.Message,"错误提示");
           }
       }
完整Demo代码

接触过的所有通信协议Demo代码

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值