c# 网络通信

本文介绍了C#中进行网络通信的常见方式,包括Server/Client架构、连接方式(长连接、短连接)、数据发送接收(异步、同步)。作者分享了在学习过程中遇到的挑战,如客户端关闭连接的判断、报文分发、并发连接稳定性、双向通信控制、通信协议制定等,并提出了对缓存机制和目标客户端寻址的思考。欢迎交流讨论。
摘要由CSDN通过智能技术生成

                                                                                               c# 服务器端网络通信  

  最近的工作涉及到网络通信,在此小结一下这段时间的收获和遇到的问题。

  一.通信方式:

  1. Server/Client:

       Server:Client : 

      1        :      1

      1        :      n(并发服务器方式)

      n        :      1(电驴,工控软件 ,额~我们的项目做客户端界面,也是如此的架构,不过目前只是1对1的,n对1需要创建多个连接,目前还没做难过)

  2.连接方式

     长连接

     短连接

 3.发送接收数据方式

    异步

    异步双工:接收和发送都在同一个程序中,有两个不同的子进程分别负责发送和接收。

    异步单工:接收和发送是用两个不同的程序。

    同步

    报文发送后等待接收。同步通讯时,要考虑到超时。

  下面贴一些最近学习网络编程时写的一些程序,我是用Socket调试工具调试完成了,不过还需要很多的改进。

   Part .1 同步通信

   

  public  class SyncServer
    {
        public delegate void ActionMsgDelegate(object sender, ActionMsgEventArgs args);
        public event ActionMsgDelegate ActionMsgEvent;

        private IPAddress myIP= IPAddress.Parse("127.0.0.1");
        private int myPort = 8000;
        private IPEndPoint myServer;
        private Socket socket;
        private bool check = true;
        private Socket acceptSocket;
        public static bool SocketServiceFlag = true;

        public SyncServer( string ip,int port )
        {
            myIP = IPAddress.Parse(ip);
            myPort = port;
        }
        public void Accept( )
        {
            myServer = new IPEndPoint(myIP, myPort);
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            Thread thread = new Thread(new ThreadStart( Receive));
            thread.Start();
        }
        public void Receive()
        {
            try
            {
                socket.Bind(myServer);
                socket.Listen(50);
                while (SocketServiceFlag)
                {
                    acceptSocket = socket.Accept();
                    if (acceptSocket.Connected)
                    {
                        Thread thread = new Thread(new ThreadStart(Round));
                        thread.IsBackground = true;
                        thread.Start();
                    }
                    Thread.Sleep(1000);
                }
            }
            catch (Exception ex)
            {

            }
        }
        public void Round()
        { 
              while( true )
              {
                  try
                  {
                      if (!acceptSocket.Connected||!check)
                      {
                          break;
                      }
                      Byte[] Rec = ReadData();
                      ///输出数据
                      if(Rec!=null)
                      {
                          string RecMessage = System.Text.Encoding.Default.GetString(Rec,0,Rec.Length);
                          updateUI("接收数据:" + RecMessage);
                          if (!check)
                          {
                              break;
                          }
                          string SendMessage = "返回数据:" + RecMessage;
                          updateUI(SendMessage);
                          byte[] sendByte = System.Text.Encoding.Default.GetBytes(SendMessage.ToCharArray());
                          SendData(sendByte);
                          if (!check)
                       
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值