请问c语言socket编程客户端如何与客户端通信的啊

因为我发现建立一个套接字以后,客户端发送的消息只到服务器,而服务器发送的消息也只到对应的那个客户端。只要告诉我一下方法就好,或者思想,谢谢了... 因为我发现建立一个套接字以后,客户端发送的消息只到服务器,而服务器发送的消息也只到对应的那个客户端。
只要告诉我一下方法就好,或者思想,谢谢了
展开
 我来答
百度网友03677c4
推荐于2016-04-10 · TA获得超过306个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:149万
展开全部
我告你个思路,就像是我想实现的QQ功能一样。

建立一个服务器Server,它用来负责转发消息。
A,B,C都是客户端
A想发送消息给B,就给Server发送(A,[B],"我是A,这是我给B的消息。"),Server收到后根据[B]将消息内容转发给B;
A想给B,C发送群消息,就给Server发送(A,[B,C],"我是A,这是我给B和C发送的消息。"),Server收到后根据[B,C]将消息内容转发给B和C。
Server想要给A,B,C都发送一条消息,必须都建立好连接后,分别给他们发送同一条消息。

服务器开启后,监听socket连接,一旦有socket连接例如A请求连接,就把它交给一个线程例如SA去处理,然后它继续监听。SA线程就只负责处理Server和客户端A之间的消息。
同理,SB线程就只负责处理Server和客户端B之间的消息,SC线程就只负责处理Server和客户端C之间的消息。
服务器有一个方法transpond(String from,String[] to,String message),处理转发消息。SA,SB,SC调用这个方法去实现通信。
雨光小宝
2011-08-10
知道答主
回答量:5
采纳率:0%
帮助的人:6.5万
展开全部
这种情况是,多台客户端连接服务端,fd = accept()。但是只以最后的fd保持,也就是第一个客户端连接后,能够收发数据,但是第二个客户端接入后,第一个不能收发数据,第二个可以。。。。问题出在,你的fd是个全局的,每次都会改变,系统收发数据仅仅以最后一次处理,所以不能多客户端连接,要解决要用并发机制。
解决方法是多进程或多线程,每当accept一个新的客户端连接后,返回一个句柄fd后,创建一个进程。该进程保存该次的fd收发数据(fork后的子进程拷贝父进程的资源,所以下次fd改变后,该子进程不会影响,这里是多进程的问题,可以研究下,想想)。或者多线程,多线程麻烦点,就不说了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
愿好问
2011-08-09 · 超过10用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:41.3万
展开全部
客户端跟服务器是一个相对的概念,比如:
两台机子A跟B,如果是A向B请求连接,那么A就是客户端,B就是服务器;相反,如果B向A请求连接,那么这个时候B是客户端,A就是服务器了。
所以,如果你只想要2台机子通信,那么直接socket连接就可以了,如果是A,B,C三台机器通信,加入A是服务器,B跟C是客户端,想要B跟C通信,那么可以有两种方法,
1. B向服务器A发消息,然后服务器转发给C
2. B直接建立一个到C的连接,或者C直接建立一个到B的连接,B给C发消息。
追问
我现在有客户端A,B与服务器C,现在A不停的发消息,服务器C能收到消息,但是另一个客户端B收不到消息,于是我将服务器将收到的消息都转发出去,但是B还是收不到。请问你有实例吗,谢谢了
追答
例子没有,不过既然你能让C收到来自A的消息,那么你如果想让C给B转发来自A的消息的话,可以新建一个C到B的连接(就跟A到C的连接一样),在这个连接中,C相对于B是客户端,B是C的服务器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式