java 网络编程中 tcp连接问题。 例如编写聊天室 , c/s结构的c和s端都是不间断实现请求--响应 。
其中还可以通过多线程来使s端可同时处理多个c端。现在本人的思想就是如何实现:当有大于2个客户端连接时在交互时必须等到所有客户端发言完毕后s端将所有客户端的发言集中整合后再...
其中还可以通过多线程来使s端可同时处理多个c端。 现在本人的思想就是如何实现: 当有大于2个客户端连接时 在交互时 必须等到所有客户端发言完毕后 s端将所有客户端的发言集中整合后再对各个客户端进行广播 。 此思想可以用其他解释, 例如编写tcp连接的多人游戏(最简单的石头剪刀布) 服务器端必须等待两人都发送了各自的选择信息完毕以后 再对两人发送的数据进行处理 得到结果后将胜负结果广播给两个客户端界面 。通俗解释就是说在C/S的网络编程中 请求响应都是不断进行的 而这里本人想要达到的效果是客户端请求后服务器接受请求需要等待到一定条件才对客户端进行处理并响应 就像上述的必须所有客户端发言一次才进行广播 或者必须2人都选择石头剪刀布完毕让服务器接受,这完成以后服务器才进行处理再广播结果。 初学java 可能这个思想只用java包中提供的API就能实现 也可能需要自己设计 所以在此求高手解答 不要盲目狂贴代码还不带解释的 重点在于思想 希望有通俗的讲解 或者正好是用到JAVA提供的什么类能够解决 也希望能有讲解 。。。。谢谢高手们看清思想解答 我觉得你们应该能理解这个意思。。。。。。如果表达不清晰请谅解。。
补充的就是 遇到的问题: 比如我想实现上述的聊天室 等所有客户端发言一次 再简单点 当接受到2条发送的发言数据以后 就广播 那么我想通过一个string数组实现 当数组都不为null时就进行响应操作(即广播) 但是会发现由于多线程的存在 每个线程拥有自己的string数组 也就是无论怎么操作 客户端发送的请求都服务器开启的各个线程分别处理了 但是我希望客户端发送的请求能够被各个线程处理以后 送往一个地方集中 进行处理 再重新分配给各个线程并响应给各个客户端 可能这个想法好像是错误的 各个线程若能够将数据集中在一个地方 那么处理以后再重新分配好像是不可能的 好像说是线程只能启动一次。。。。。反正这其中的道理理解的不是很深刻 求指点 也查了许多资料 但是都只能解决正常聊天室的编写 请求一次就响应一次 即时广播。 搜索像java联机游戏编写 许多代码又看不懂 所以万般无奈只能求助高人。。 求指导思想。
如果将各线程接受的各客户端发送的请求数据都保存在同一个文件中 然后等达到条件 让服务器读取文件处理后响应给各个客户端 。 这个方法是否可行。。。? 展开
补充的就是 遇到的问题: 比如我想实现上述的聊天室 等所有客户端发言一次 再简单点 当接受到2条发送的发言数据以后 就广播 那么我想通过一个string数组实现 当数组都不为null时就进行响应操作(即广播) 但是会发现由于多线程的存在 每个线程拥有自己的string数组 也就是无论怎么操作 客户端发送的请求都服务器开启的各个线程分别处理了 但是我希望客户端发送的请求能够被各个线程处理以后 送往一个地方集中 进行处理 再重新分配给各个线程并响应给各个客户端 可能这个想法好像是错误的 各个线程若能够将数据集中在一个地方 那么处理以后再重新分配好像是不可能的 好像说是线程只能启动一次。。。。。反正这其中的道理理解的不是很深刻 求指点 也查了许多资料 但是都只能解决正常聊天室的编写 请求一次就响应一次 即时广播。 搜索像java联机游戏编写 许多代码又看不懂 所以万般无奈只能求助高人。。 求指导思想。
如果将各线程接受的各客户端发送的请求数据都保存在同一个文件中 然后等达到条件 让服务器读取文件处理后响应给各个客户端 。 这个方法是否可行。。。? 展开
4个回答
展开全部
你的意思我差不多明白了,现在我跟你说下那个两个人猜拳的一个思路
服务端是可以查看客户端连接情况的
你可以在客户端弄一个Map 用服务端的IP 作为键 , 发送的消息作为值存放
客户端发送消息后就存放在Map里面
当服务端接收到两边客户端都有传入消息,就根据IP 取出值来比较
然后将结果返回给客户端
其实那个多人聊天,需要所有人发言后才会公布广播的,也可以按照这个思路去做
服务端是可以查看客户端连接情况的
你可以在客户端弄一个Map 用服务端的IP 作为键 , 发送的消息作为值存放
客户端发送消息后就存放在Map里面
当服务端接收到两边客户端都有传入消息,就根据IP 取出值来比较
然后将结果返回给客户端
其实那个多人聊天,需要所有人发言后才会公布广播的,也可以按照这个思路去做
追问
我先去查下map是什么 按你说的摸索一下 你别回答我。。。我自己搜索对我启发大。。。等我实在不行了我再请教你
要不然你留个qq呗。。。。=。=
追答
猜拳的那个做的好的话,你可以在服务端开个十秒的定时任务,当猜拳开始的时候发消息给客户端 十秒内请输入你要出的拳,当10秒过后会去map里面根据客户端IP 拿用户输入的值对比
如果某一方未输入,视为弃权,这样就避免了一方不输入,服务端就一直不会公布结果
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
c/s
就是一个不断请求响应的过程。
如果你是想做一个聊天室的话,想得到广播的内容,你就需要向服务器端发送请求,然后得到响应。也就是C端定时向S端发送请求。
就是一个不断请求响应的过程。
如果你是想做一个聊天室的话,想得到广播的内容,你就需要向服务器端发送请求,然后得到响应。也就是C端定时向S端发送请求。
追问
-,- 我会做聊天室 也会定时发送请求。。。。我的问题应该讲清楚了
主要就是要达到条件再响应。 不是定时发送请求。。。是达到条件。。。
追答
我不知道我理解的对不对,比哪说有五个人在聊天室里。也就是有五个客户端。
你难道要等五个人都发一次言,才可以看到吗?这样显然是不可取的。如果有一个人不发言,
那剩下的四个人不是要无限等待了?
我的想法是,做一个队列,用来记录,发来的消息。
再创建出N个除列,分别对应在线的N个用户。
一个消息发过来,复制成N份,存到N个队列中。
那个用户有请求过来,就据相应队列中的消息反回给该用户。
这个被设成推荐的了,可能再回复不了了,可能通过百度hi联系。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个客户端请求都给他分配不同得 端口号
并且用一个主端口号来监听请求。按这种思路就行了!
并且用一个主端口号来监听请求。按这种思路就行了!
追问
能说的详细点吗? 意思是 主端口监听请求,让所有客户端的请求都由此主端口监听
然后每个客户端自己也又被服务器分配了各自的端口 这样就是每个客户端的请求被两个端口在监听(一个主端口 一个被分配的端口) 是这个意思吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
哦 你是不是想写一个天黑请闭眼啊
追问
问题差不多解决了。。你说的这个倒是高级了点 不过思想也是这样。
追答
呵呵 我说看着像么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询