需求是这样的
比如我现在的服务端可以承受30个用户,那么如果直接用serversocket可以在服务端维护一个当前连接用户的一个列表,但是在客户端两两匹配后,就会有更复杂的逻辑处理,这时候我就想把这两两配对的用户作为一个线程来处理,问题就出来了
我可以把多线程都做好,但是这样的话我服务端第一个serversocket维护的用户列表里面的用户句柄怎么给线程让他发送相应的数据给用户其实需求就好比如一个棋牌类游戏的服务端比如所有用户都在房间内,然后每个桌子坐两个人,两个人都举手了后开始游戏后就要处理更复杂的游戏的逻辑以及网络传输、倒计时等我的问题是如果两个用户都举手后我怎么把我的主ServerSocket上需要发送的消息给到线程中比如我的主ServerSocket放在Form1上面,用它来等待用户的请求,如果两个用户匹配成功后就开启一个线程,在线程里面处理逻辑没啥问题,但是我就是不知道放入线程后怎么给线程内两个用户发送消息了
就像大家都举手了后给一个10秒倒计时准备,然后再开始游戏的这个功能一样或者我说的不够清楚,不知道大家能不能理解我的意思如果有人能理解请指点一下目前我可以自己实现线程类或者在serversocket的GetThread里面去创建线程,不知道怎么把ServerSocket里面维护的列表和线程里面的列表匹配起来并且给他们发送相应的信息在线等
比如我现在的服务端可以承受30个用户,那么如果直接用serversocket可以在服务端维护一个当前连接用户的一个列表,但是在客户端两两匹配后,就会有更复杂的逻辑处理,这时候我就想把这两两配对的用户作为一个线程来处理,问题就出来了
我可以把多线程都做好,但是这样的话我服务端第一个serversocket维护的用户列表里面的用户句柄怎么给线程让他发送相应的数据给用户其实需求就好比如一个棋牌类游戏的服务端比如所有用户都在房间内,然后每个桌子坐两个人,两个人都举手了后开始游戏后就要处理更复杂的游戏的逻辑以及网络传输、倒计时等我的问题是如果两个用户都举手后我怎么把我的主ServerSocket上需要发送的消息给到线程中比如我的主ServerSocket放在Form1上面,用它来等待用户的请求,如果两个用户匹配成功后就开启一个线程,在线程里面处理逻辑没啥问题,但是我就是不知道放入线程后怎么给线程内两个用户发送消息了
就像大家都举手了后给一个10秒倒计时准备,然后再开始游戏的这个功能一样或者我说的不够清楚,不知道大家能不能理解我的意思如果有人能理解请指点一下目前我可以自己实现线程类或者在serversocket的GetThread里面去创建线程,不知道怎么把ServerSocket里面维护的列表和线程里面的列表匹配起来并且给他们发送相应的信息在线等
说下我的思路
服务端只管收不同命令的包,收到包后,放到线程去处理,不影响服务端收包
至于哪个和哪个联系, 应该是在包里附带的信息里, 比如包的设计中带有 同桌的IP和端口号,
这样我就知道该和哪几个IP和端口号去通讯
返回来说,第一个问题是我还不知道怎么从线程里面调用主ServerSocket来发送消息可以给一个完整的Demo吗?就是说能从线程调用主ServerSocket来发送消息这个功能
但是另外一个问题是,如果这样做那么客户端就需要创建线程后重新连接一次服务器,那么又需要重新启动一个线程,那么这个逻辑是不通的,因为一个主机绑定的端口不能被重新绑定,如果换端口进行绑定那么客户端势必需要重连,但是线程又是靠主ServerSocket的里面的某个逻辑来创建的所以看起来像死循环
请各位高手指点一下思路最好是能给一个简单的Demo不胜感激
你只有几十个客户端,没必要那么高效
ServerSocket 我没用过, 我都自己写原始SOCKET, 主要是兼容我C++代码, 只要稍微转下就是C++代码
每个线程创建SOCKET,肯定效率会高些的,
做一个boolean就可以了
然后sleep(1000);inc一次
假定要10秒那么做个判断后修改boolean的值就是了
这里不讨论如何实现这个倒计时
只是说在创建线程后如何从线程中根据socket.sockethandle来从主serversocket发送给相应的用户消息
服务端保存 在线用户用户的基本信息, 包括 IP, 端口,状态(举手, 游戏开始), 桌号
A 在举手状态, 同时心跳包和服务端通讯
如果同桌的B 也是举手了状态, 查询同桌的基本信息,如果发现同桌的A也是举手状态,则给这俩用户发送消息,通知游戏开始?
我是把你的顺序反过来说了我是说我们都开始了其实这个倒计时是无意义的,我只是用它来举例,就是创建线程后怎么通过线程给这两个人发消息因为线程执行完了自己会销毁,就会退出线程,为了模拟可以用倒计时来代替而已重点还是线程和主ServerSocket的维护列表之间的问题
定义类的LIST 每当有会话信息来临时,循环LIST判断,就可以了