游戏大厅从基础开始(3.5)——客户端与服务器的连接

可能要犯大忌讳 本次只有代码 所以补充两句

正在实现策略模式的constructor  所以最 近没有时间整理注释

大家凑合看 随后补说明

Code

Namespace Communicate.TCP    Class TCPLinkListener        Inherits Global.WayneGameSolution.Communicate.LinkListener        Public Shared ReadOnly propertyKeys As String() = {"Port", "TimeoutSecond", "LinkProveString"}        Public TCPListener As System.Net.Sockets.TcpListener        Private ClientLinkProvePool As New LinkedList(Of IClientLink)        Sub New(ByVal Parms As XElement)            MyBase.new(Parms)            Dim p As Int32            'todo: 各种本地化资源            Dim NotAvailableProperties As IEnumerable(Of String) = From key As String In propertyKeys Select key Where Not _ParmsDic.ContainsKey(key)            If NotAvailableProperties.Count > 0 Then                Throw New CommunicateException(String.Format(My.Resources.Communicate_TCPLinkListener_Parms_Error_Message, String.Join(",", propertyKeys), propertyKeys.Length, String.Join(",", NotAvailableProperties.ToArray())))            End If            If Port = -1 Then                Throw New CommunicateException((My.Resources.Communicate_TCPLinkListener_Parms_Port_Error_Message))            End If            If Not Int32.TryParse(Port, p) Then                Throw New CommunicateException("no int port")            End If            TCPListener = New System.Net.Sockets.TcpListener(Net.IPAddress.Any, p)            TCPListener.Start()            TCPListener.BeginAcceptSocket(AddressOf TCPListener_AcceptSocket, TCPListener)        End Sub        Sub TCPListener_AcceptSocket(ByVal o As IAsyncResult)            CheckTimeoutedLinks()            Dim socket As System.Net.Sockets.Socket = TCPListener.EndAcceptSocket(o)            Dim clk As New TCPClientLink(socket, TimeoutSecond, LinkProveString)            ClientLinkProvePool.AddLast(clk)            TCPListener.BeginAcceptSocket(AddressOf TCPListener_AcceptSocket, TCPListener)        End Sub        Private Sub CheckTimeoutedLinks()            Dim lk As TCPClientLink            Do While ClientLinkProvePool.Count > 0                lk = ClientLinkProvePool.First().Value                If lk.LastDataTime.AddSeconds(TimeoutSecond) < Now Then                    ClientLinkProvePool.RemoveFirst()                    If Not lk.IsLinkProved Then                        lk.Close()                    End If                Else                    Exit Do                End If            Loop        End Sub        ReadOnly Property Port() As Int32            Get                Dim p As Int32                If Int32.TryParse(ParmsDic("Port"), p) Then                    Return p                Else                    Return -1                End If            End Get        End Property        ReadOnly Property TimeoutSecond() As Int32            Get                Dim t As Int32                If Int32.TryParse(ParmsDic("TimeoutSecond"), t) Then                    Return t                Else                    Return -1                End If            End Get        End Property        ReadOnly Property LinkProveString() As String            Get                Return ParmsDic("LinkProveString")            End Get        End Property    End ClassEnd Namespace

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, as
, if
, lk
, end
, property
, 游戏 服务器 socket
AS基础教程整理
tcp客户端和服务器端、我的世界服务器客户端、服务器和客户端的区别、客户端与服务器通信、易语言服务器与客户端,以便于您获取更多的相关知识。

时间: 2024-11-03 05:29:40

游戏大厅从基础开始(3.5)——客户端与服务器的连接的相关文章

线程-使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求

问题描述 使用Java socket让客户端与服务器建立连接后,服务器如何判断来自客户端的各类请求 初学java,目前写了一个服务端和一个客户端.大致了解了如何socket通信是如何操作的,并且初步实现了客户端和服务端的通信.也仅仅是是接受和返回简单的字符串.部分代码如下 public void run(){ try{ serverSocket=new ServerSocket(SERVER_PORT_ONE); System.out.println("serversocket已创建"

游戏大厅从基础开始(4)-通过L2X用配置文件反射组装程序(VB only)

很久没更新了.前一阵工作比较充实(就是比较劳累拉~),加上向老赵学习努力瘦身,精神愈发痛 苦,难免就懒惰下来.通用倒了,项目突然死亡,On bench了一个月,越发的无力. 好消息也是 有的,在m$ msdn论坛努力回答问题,总算当上了个版主.虽然7月申请mvp失败 但是鄙人生性好显摆,好听一点就是爱分享,所以一个咕噜爬起来,又是条好汉. -----------------------闲话到此 为止----------------------- 通过配置来制定程序 说起通过配置来制定程序,不得不

游戏大厅从基础开始(5)--绕回来细说聊天室(上)

Wiki定义的聊天室 网络聊天室通常直称聊天室,是一种人们可以在线交谈的的网络论坛,在 同一聊天室的人们通过广播消息进行实时交谈. 聊天室可以建立在即时通讯软件(如MSN Messenger.QQ).P2P软件.万维网(如 Halapo, Meebo ) 等基础上,万维网方式更为普通和种类繁多 ,交谈的手段不局限于文本,更包括语音.视频.通常聊天室是按照房间或频道为单位的,在同一房间 或频道的网人可以实时地广播和阅读公开消息.一般情况下,与其它网络论坛.即时通讯不同的是,聊 天室不保存聊天记录.

游戏大厅从基础开始(3)——客户端与服务器的连接

本文配套源码 看了上篇随笔的回复 发现大家都很关心如何实现连接. 但是本节可能不会涉及到数据连接的 具体实现. 盲目的实现连接 而不试图从更高的位置来考虑连接的作用,只能徒增耦合. 而网络传输的实现各有特点,耦合过高的话 ,稍不注意业务逻辑就会成为通讯协议的牺牲品. 这种状况 往往让我们产生"只能针对xxx传输协议"的架构 . 其实只要多加思考,我 们便能跳出协议的樊篱,毕竟"遵循某个接口实现一个基于xx通讯协议的类" 属于那种可以几 百块钱外包到"老少边

游戏大厅从基础开始(2)——最基础的交流:聊天

从前有个国王叫做混沌 他没有七窍 没办法与外界交流 两个朋友希望他开心 就给他凿了七窍 于是他就死了. 所以我们这一章来给用户添加七窍,让用户和房间具有最 基本的聊天功能. 什么?我前面的故事什么意思? 我也不知道. 其实,网络游戏 交流的最基础,就是聊天室. 如果我们把任何一个网络游戏高度抽象化,把所有的非共性的部分 全部去掉,我们会得到这样一个抽象的流程. 客户端发包 给服务器. 服务器处理包. 客户端收取广播数据. 刚刚好 聊天室恰恰实现了这样一个最简化的流程. 用户 说话. 服务器作简单

游戏大厅从基础开始(1)——最简单的关系,用户与房间

做游戏 就好像写一篇简单的记叙文 作为小学语文大纲要求 记叙文需要完整地叙述: 时间,地点,人物,事件 也就是 WHEN,WHERE,WHO,WHAT HAPPENED 猜猜哪个最重 要? 我选WHO WHO 没有WHO,没有了某个意识的主观活动影响客观环境,故事就是 静止的.那就不叫故事,叫速写. 在一个网络游戏服务模型中,最基础的概念就是 WHO 有了WHO游戏才不是电影电视剧那样的直接灌输. 有了WHO电脑屏幕前的个体才能与别的个体有所 区分 有了个体的区分 网络游戏才可以"互动"

游戏大厅从基础开始(8)--绕回来细说聊天室(下)垃圾列表

前情回顾 我们的最初的需求是建立一个拉模式下用户暂存的顺序信息池 列表-e话通聊天室大厅">还是这张工作模式图 我们可以把这个需求设计为 Clear:清除所有内容 GetEnumerator :实现枚举器,新向旧方向的顺序枚举,这样一旦到达上次读取的时间就可以中断 枚举. RecycleFromButtom:从旧向前进行搜索 把满足条件的扔到GC StackOn :把一个新 信息放在堆栈的顶部 这就好像是一个旧报纸回收传送带,一群人在焚烧之前看看还有没有什么值 得保存的信息 排个照,存个档

游戏大厅从基础开始(7)--绕回来细说聊天室(中间偏下)之女仆编年史2

老少爷们儿反击战 上一篇中 我们的女仆终于可以做一些像阳光下其他人一样的事情了,少爷 们可以和女仆酱一起参加下午茶~ 难得的上流社会啊 这是永远1v1被人私有的女奴 和 喝茶时被 人共有的女仆酱最明显的差异~ 明媚的午后阳光下,庭院里白色长餐桌两旁,英俊的少爷们彼此 交换着最近的趣闻轶事,一面欣赏女仆酱以1/3几率打翻茶水,可爱而笨笨地努力侍奉着,闪闪发光的样 子. 人间极乐喵~~~~~~~~~~ :3 但距离真正的自由~~无Lock还是很远,很远. 因为, 老爷和少爷的调教仍然是一如既往的频繁

游戏大厅从基础开始(6)--绕回来细说聊天室(中)之女仆编年史1

上一篇我们大致的了解了几种聊天室的行为模式 最简单明了的推模式 几乎不需要任何多余的 语言来描述它的实现 这一篇我们看看如何实现拉模式更有效. 本图清晰的表现了 "拉"模式聊天室的行为. 并发多用户向数据池写数据 并发多用户从数据池读 书据 数据最好以时间为顺序储存在集合中 某时间向后的枚举查找将是最大的消耗. 聊天室进化 -女仆编年史神秘的原始社会 仍然参考我们神奇朴素的Asp3聊天室 53 Application.lock 54 Application("show5&qu