JAVA服务器与客户端的socket通信问题
你可以在每个用户连上服务器端时,都发送一个消息,就是用4个字节表示是用户的ID,并将与用户通信的socket,用一个HashMap存储起来,而不是用LinkList。<ID,Socket>
后面如果A发送消息给C,就把A的前四个字节(即ID)取出来,在HashMap中找到与C通信的socket,然后把消息通过socket发送出去···· 这部分代码应该很容易实现的,Socket通信这东西,理清了思路就很好弄了~~
你的文件中的问题
// 会阻塞进程,直到有客户端连接上来为止
// 既然是直到有客户端连接上,那么就要弄明白哪个是与客户端连接的套接字
// sockClient就是与客户端连接的套接字
sockClient = accept(sockServer, (SOCKADDR)&addrClient, &len);
//接收并打印客户端数据
recv(sockClient, recvBuf, 100, 0);
printf("%s\n", recvBuf);
// 所以此处,应该把sockServer改为sockClient
send(/sockServer/sockClient, sendBuf, 100, 0);
PS:服务器客户端通信,是要保持服务器与客户端的连接。
而不能这样立即关闭,如果设置不对,立即关闭,缓冲区的数据是会丢失的。那客户端也就不会再收到数据了。
你可以加Sleep(10000);来测是通信过程
//关闭socket
closesocket(sockClient);
这个嘛得知道各自的ip和程序的编号,
然后服务器绑定自己的ip和编号bind然后监听连接请求 listen 客户端申请所要链接的ip和对方的编号connect
这是tcp
udp就是都绑定各自的ip和程序的编号,谁主动connect,谁就是客户端,服务器端listen就行 ,这个传输数据快,但是不可靠,一般网页播放的媒体影音,就是用。
跨网段,这个不用你操心,协议已经考虑到了。
0条评论