请问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调用这个方法去实现通信。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-10
这种情况是,多台客户端连接服务端,fd = accept()。但是只以最后的fd保持,也就是第一个客户端连接后,能够收发数据,但是第二个客户端接入后,第一个不能收发数据,第二个可以。。。。问题出在,你的fd是个全局的,每次都会改变,系统收发数据仅仅以最后一次处理,所以不能多客户端连接,要解决要用并发机制。
解决方法是多进程或多线程,每当accept一个新的客户端连接后,返回一个句柄fd后,创建一个进程。该进程保存该次的fd收发数据(fork后的子进程拷贝父进程的资源,所以下次fd改变后,该子进程不会影响,这里是多进程的问题,可以研究下,想想)。或者多线程,多线程麻烦点,就不说了。
第2个回答  2011-08-09
客户端跟服务器是一个相对的概念,比如:
两台机子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的服务器

C语言socket编程要怎么实现服务器可以发消息给客户端?
简单的说socket是一个全双工的通信通道,即使用TCP或者UDP通信时均可以在发送消息的同时接受消息,它不区分是否是服务器。根据这个概念你的问题就很好回答。》当客户端与服务器连接后。有什么方法使服务器可以随时随地发消息给客户端?》我现在只能。客户端发个消息给服务器。服务器才能发个消息给客户端。

编程的兄弟,能不能介绍下c语言中,流是怎么通过socket接收的。。接收到...
SOCKET sockListener;SOCKADDR_IN sin,saClient;char cRecvBuff[1024];int nSize,nbSize;int iAddrLen=sizeof(saClient);if(WSAStartup(MAKEWORD( 1, 1 ), &wsaData )!=0)\/\/进行WinSocket的初始化 { printf("Can't initiates windows socket!Program stop.\\n");\/\/初始化失败返回-1 return ...

linux C语言编程,socket实现的即使通讯系统
Socket通信创建步骤:(1)通过socket()函数创建socket(2)通过bind函数绑定socket于设备地址(3)进行读写操作read\/recv\/recvfrom write\/send\/sendto(4)close方法关闭套接字 例子如下:test1.c include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <netinet\/in.h> #in...

socket编号客户端和服务器端后,却运行不出结果,也就是输不进去字符,好...
楼主你说的是不是这样的啊,客户和服务器都有你自己的电脑来承担,也就是在你的电脑上同时运行客户端和服务器端,如果是这样的话,既然是连接不成功,那很有可能是你没有绑定正确的服务器地址,在这里当然就是你自己的ip了,试试效果如何?谢谢 ...

保护隐私?漫画C语言socket聊天软件详解
客户端的编写与服务端类似,但需要通过connect函数连接服务器。与服务端的通信流程相同,包括接收和发送数据,最后关闭连接。整个流程确保了客户端和服务端之间的可靠通信。在编写代码时,需要遵循一定的步骤和规范,确保程序的正确性与稳定性。理解并掌握socket编程的基本概念和流程,对于构建高效、可靠的聊天...

LinuxC编程建立TCP连接linuxctcp
接下来,可以使用bind()函数将套接字与系统分配的IP地址和端口绑定,然后使用listen()函数使套接字变为被动模式,并启动监听进程,此时服务器已准备就绪,等待客户端的连接。最后,使用accept()函数接受客户端的连接,当接受到客户端的连接后,服务器就可以使用建立的socket与客户端通信了。示例代码如下:...

网络编程-【自己动手】用C语言写一个基于服务器和客户端(TCP)!
网络编程之旅,让我们通过C语言实践一个基础的TCP服务器与客户端。首要的关键技术就是掌握socket,它是一种通信链的句柄,用于标识IP地址和端口,连接不同计算机或虚拟机。TCP协议,作为传输层的重要协议,其特点是面向连接、可靠和基于字节流。理解它的三次握手机制、可靠传输以及数据的字节流处理是基础。

用C语言帮忙写一个“TCP Client\/Server模式的通信程序设计与实现”
pragma comment(lib,"Ws2_32")define PORT 6666 \/* 客户机连接远程主机的端口 *\/ define MAXDATASIZE 100 \/* 每次可以接收的最大字节 *\/ int main(){ int sockfd, numbytes;char buf[MAXDATASIZE];char msg[MAXDATASIZE];char *argv="127.0.0.1";struct sockaddr_in their_addr; ...

怎样用C语言做socket网络编程?
mfc只是对socket进行了一些封装,大部分人做网络编程都是用的原始的socket,比如如下接口都可以在c下进行调用\\x0d\\x0a 1.socket() \\x0d\\x0a 2.bind() \\x0d\\x0a 3.connect() \\x0d\\x0a 4.listen() \\x0d\\x0a 5.accept() \\x0d\\x0a 6.send() 和recv() ...

c语言和java 使用socket通信的时候 数据大小端转换的问题
我做IOS都一样的,都是小端的。建议你用抓包软件抓下包看看,还有就是注意发送时数据对齐问题,不同的系统可能一样的类型长度就不一样,比如在mac系统中long型有8字节,但是在IOS、VC中就只有四个字节,一般使用socket发送数据时都是打包发送的(头部一般都是固定的结构体),这个问题必须要注意 ...

相似回答