请问c语言socket编程客户端如何与客户端通信的啊
因为我发现建立一个套接字以后,客户端发送的消息只到服务器,而服务器发送的消息也只到对应的那个客户端。只要告诉我一下方法就好,或者思想,谢谢了...
因为我发现建立一个套接字以后,客户端发送的消息只到服务器,而服务器发送的消息也只到对应的那个客户端。
只要告诉我一下方法就好,或者思想,谢谢了 展开
只要告诉我一下方法就好,或者思想,谢谢了 展开
展开全部
我告你个思路,就像是我想实现的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调用这个方法去实现通信。
建立一个服务器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调用这个方法去实现通信。
展开全部
这种情况是,多台客户端连接服务端,fd = accept()。但是只以最后的fd保持,也就是第一个客户端连接后,能够收发数据,但是第二个客户端接入后,第一个不能收发数据,第二个可以。。。。问题出在,你的fd是个全局的,每次都会改变,系统收发数据仅仅以最后一次处理,所以不能多客户端连接,要解决要用并发机制。
解决方法是多进程或多线程,每当accept一个新的客户端连接后,返回一个句柄fd后,创建一个进程。该进程保存该次的fd收发数据(fork后的子进程拷贝父进程的资源,所以下次fd改变后,该子进程不会影响,这里是多进程的问题,可以研究下,想想)。或者多线程,多线程麻烦点,就不说了。
解决方法是多进程或多线程,每当accept一个新的客户端连接后,返回一个句柄fd后,创建一个进程。该进程保存该次的fd收发数据(fork后的子进程拷贝父进程的资源,所以下次fd改变后,该子进程不会影响,这里是多进程的问题,可以研究下,想想)。或者多线程,多线程麻烦点,就不说了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
客户端跟服务器是一个相对的概念,比如:
两台机子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,如果是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的服务器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询