• RFID会议签到系统总结(二十一)――服务端的通讯


     

    这一篇其实没什么可讲的,只提一下跟客户端不太一样的一些地方。

    服务端跟客户端最大的区别是它面对的不是单单一个连接,而是有一些个连接。对于接收与发送来讲它是要具体到accept进来的每一个连接的,所以这里有一个SocketStateObject参数会贯穿始终,这个参数主要就是放对应客户端的Socket连接及一些状态变量,在accept进来一个连接后即创建一个这个对象。

           public void Listen(int port)

           {         

               IPEndPoint ipe = new IPEndPoint(IPAddress.Any,port);

               workSock = new Socket(ipe.AddressFamily,SocketType.Stream,ProtocolType.Tcp);

               workSock.Bind(ipe);

               workSock.Listen(100);

               acpT = new Thread(new ThreadStart(acceptThread));

               acpT.IsBackground = true;

               acpT.Start();

           }

     

           private void acceptThread()

           {

               while(true)

               {

                  Socket asock = workSock.Accept();

                  SocketStateObject state = new SocketStateObject(asock);    

                  if (OnConnect != null)

                      OnConnect(state,System.EventArgs.Empty);

                   ThreadPool.QueueUserWorkItem(new WaitCallback(ReceiveThreadEntryPoint),state);

               }

           }

     

    象上面OnConnect事件及ReceiveThreadEntryPoint方法里都会跟进这么一个参数。

     

    管理连接是个很复杂、很讲究技术的活。可用连接的数据接收与发送(甚至有些接收与发送必须是相关的)、连接的可用性监测、失效连接的移除。所有这些都要作应有的记录,并且一些还要往UI界面触发事件,事件触发这一点至关重要,也最为棘手,这其中涉及到很多线程同步、线程阻塞的问题。

    对于这种极为复杂的问题,最好的解决方法是参照现有的成熟方案进行设计、实现或者拿来主义。但之前也没涉足到这些方面的开发,一时还真找不到比较理想的东西,加之项目本身对于通讯的要求不甚高,10个连接顶天了(如果真有哪个客户要10个签到终端,那真是绝对的上帝了,至目前为止最多的也就5个终端,一般不会多于3个),所以在这次开发中我就用了一些简单的方法来管理客户端的连接。

    由于这一块并没有经过认真的设计,也暂时无力作认真的设计,最后实现的东西自己也不满意,这里就不去讲述如何实现管理连接的了。

  • 相关阅读:
    前天去游泳了
    Microsoft今天开了中文的MSDN了,以后查资料有时要快了点吧
    Visual Studio .NET已检测到指定的WEB服务运行的不是ASP.NET 1.1版
    sqlserver 2005 利用游标解决标量值函数主键自增id批量导入数据问题
    nvarchar查询条件中不用加单引号''吗?
    使用标量值函数作为主键自增值的时候,动软代码生成器的插入方法需要去掉主键的参数。
    c#里的'0','1'对应sqlserver2005中的False,True
    三元运算符绑定缩略内容
    循环插入数据存储过程
    01|02|03| ====> (01,02,03)用于in id数组这种查询方式
  • 原文地址:https://www.cnblogs.com/lichdr/p/835987.html
Copyright © 2020-2023  润新知