多个客户端通过一个服务端实时通信问题,求大神!

时间:2022-10-01 23:58:53
现有一个服务端,多个客户端与服务端相连后想进行实时通信。假设有客户端0和客户端1,客户端0首先将数据发送到服务端,然后服务端再发送给客户端1,信息不能实时显示,比如客户端0发送hello,一定到等到客户端1向服务端发送一些信息时才能接受到hello(好像是因为套接字的通信机制决定的,不知有没有解决方法)?求客户端0发送hello后,hello实时显示在客户端1的方法,就像聊天程序一样。用的是最底层的socket套接字编的,没有用任何包。请各位大神指教!

17 个解决方案

#1


一般处理是,你可以让客户端第一次登陆时都发送一个登陆消息,以后就直接收发信息

#2


能比能说的详细点

#3


就是客户端一开始就先发送类似登陆验证的数据给服务器

#4


为什么不能立即转发?我不明白了
服务器收到就立即转发给另外的客户端,为什么不能呢

#5


该回复于2011-02-23 13:46:52被版主删除

#6


每个客户端连接到服务器后服务器都保存下与它对应的socket,当某个客户端给其他客户端发消息的时候找到这个socket然后发送就行了

#7


引用 6 楼 mayudong1 的回复:
每个客户端连接到服务器后服务器都保存下与它对应的socket,当某个客户端给其他客户端发消息的时候找到这个socket然后发送就行了

这个方法倒是可行,不过通过服务器为什么就不行了呢

#8


引用 4 楼 year2002 的回复:
为什么不能立即转发?我不明白了
服务器收到就立即转发给另外的客户端,为什么不能呢

服务器收到就立即转发给另外的客户端,服务器发了,但是另外客户端收不到啊,服务器是被动响应的,不能主动发起啊

#9


你的服务器端是否维护了客户端连接的链表了呢?

#10


早上不是出现一位大婶吗,
也是一个即时聊天的软件,
看样子学的蛮好的


http://topic.csdn.net/u/20110222/21/4c6e8f4e-e035-4385-a969-540f6bc687da.html?90654

#11


写的很好,
打错字了,呵呵

#12


办法1:客户端和服务器端一直连接着,当服务器受到客户0的hello后马上通过和客户1连接的socket发送给客户1
办法2:所有的客户端也开一个监听的服务socket,当服务器受到客户0的hello后,马上新建一个socket连接到客户端1,并发送hello

#13


服务器端接收到这个信息以后,直接检查有多少客户端socket在连接,然后排出发来的这个客户端,给其余的都发一份,不久可以了吗?你在想什么啊?

#14


引用 13 楼 mervynchina 的回复:
服务器端接收到这个信息以后,直接检查有多少客户端socket在连接,然后排出发来的这个客户端,给其余的都发一份,不久可以了吗?你在想什么啊?

直接send了呀,但是目标客户端上就是显示不出来,而且send是有指向性的

#15


引用 9 楼 visualeleven 的回复:
你的服务器端是否维护了客户端连接的链表了呢?

是的

#16


接收保存每个连接的socket 给每个套接字做个标识 要给哪个发送信息就给哪个发 

#17


TCP可以这么做:服务器与客户端做定时循环收发,在服务器与0的一个收发内,如果0要往1发消息,则先发给服务器,服务器回个什么应答给0继续下一个收发。然后服务器检查有没有发往某客户的消息,发现要发给1,那么在与1的一个收发内,发给1,1如果累计有要发往其他客户端的消息,就在这个收发内发回给服务器,否则发个应答给服务器。继续下一轮服务器跟所有客户端的收发周期。

#1


一般处理是,你可以让客户端第一次登陆时都发送一个登陆消息,以后就直接收发信息

#2


能比能说的详细点

#3


就是客户端一开始就先发送类似登陆验证的数据给服务器

#4


为什么不能立即转发?我不明白了
服务器收到就立即转发给另外的客户端,为什么不能呢

#5


该回复于2011-02-23 13:46:52被版主删除

#6


每个客户端连接到服务器后服务器都保存下与它对应的socket,当某个客户端给其他客户端发消息的时候找到这个socket然后发送就行了

#7


引用 6 楼 mayudong1 的回复:
每个客户端连接到服务器后服务器都保存下与它对应的socket,当某个客户端给其他客户端发消息的时候找到这个socket然后发送就行了

这个方法倒是可行,不过通过服务器为什么就不行了呢

#8


引用 4 楼 year2002 的回复:
为什么不能立即转发?我不明白了
服务器收到就立即转发给另外的客户端,为什么不能呢

服务器收到就立即转发给另外的客户端,服务器发了,但是另外客户端收不到啊,服务器是被动响应的,不能主动发起啊

#9


你的服务器端是否维护了客户端连接的链表了呢?

#10


早上不是出现一位大婶吗,
也是一个即时聊天的软件,
看样子学的蛮好的


http://topic.csdn.net/u/20110222/21/4c6e8f4e-e035-4385-a969-540f6bc687da.html?90654

#11


写的很好,
打错字了,呵呵

#12


办法1:客户端和服务器端一直连接着,当服务器受到客户0的hello后马上通过和客户1连接的socket发送给客户1
办法2:所有的客户端也开一个监听的服务socket,当服务器受到客户0的hello后,马上新建一个socket连接到客户端1,并发送hello

#13


服务器端接收到这个信息以后,直接检查有多少客户端socket在连接,然后排出发来的这个客户端,给其余的都发一份,不久可以了吗?你在想什么啊?

#14


引用 13 楼 mervynchina 的回复:
服务器端接收到这个信息以后,直接检查有多少客户端socket在连接,然后排出发来的这个客户端,给其余的都发一份,不久可以了吗?你在想什么啊?

直接send了呀,但是目标客户端上就是显示不出来,而且send是有指向性的

#15


引用 9 楼 visualeleven 的回复:
你的服务器端是否维护了客户端连接的链表了呢?

是的

#16


接收保存每个连接的socket 给每个套接字做个标识 要给哪个发送信息就给哪个发 

#17


TCP可以这么做:服务器与客户端做定时循环收发,在服务器与0的一个收发内,如果0要往1发消息,则先发给服务器,服务器回个什么应答给0继续下一个收发。然后服务器检查有没有发往某客户的消息,发现要发给1,那么在与1的一个收发内,发给1,1如果累计有要发往其他客户端的消息,就在这个收发内发回给服务器,否则发个应答给服务器。继续下一轮服务器跟所有客户端的收发周期。