前后台使用的是socket通信,目前情况是同一个客户端起了好几个进程给同一个地址和端口号的服务端发请求,请问服务端返回的相应能够知道是哪个客户端发送的吗,会不会出现客户端的某个进程发的请求从客户端另一个进程接受的情况,请各位大虾帮忙解答一下,非常感谢!

解决方案 »

  1.   

    你还没有理解 socket 的含义
    socket 是指一个 <IP,port>对
    一个边接是由<源IP,源端口,目标IP,目标端口>四元组唯一标识的网络会话
    你的服务器端 IP 和 端口已经确定了,所以可以根据 源IP和源端口区分客户端
      

  2.   

    服务器端使用 listen 等待客户端的连接,客户端使用 connect 通过带有Syn标志的TCP包发给服务器端请求连接
    所以客户端的 connect 肯定是发给服务器端的,完全不懂为什么会问“会不会出现客户端的某个进程发的请求从客户端另一个进程接受的情况”
      

  3.   

    目前情况是这样的:客户端fork了5个子进程,而且每个进程都是长连接连接同一台服务器的同一个端口,并且客户端各个进程都是批量发送请求的;服务端根据客户端的请求也fork出不同的子进程进行批量处理,处理完后返回,从目前的测试情况来看,好像会出现客户端某个进程的请求,从客户端的另外一个进程返回的情况。这是否跟长连接和短连接有关系啊?请帮忙解答一下,非常感谢!
      

  4.   

    不同的进程socket不是同一个啊
    怎么可能出现这样的情况呢
    服务器会发给某个socket
      

  5.   

    对于同一个客户端fork出来的不同子进程,客户端的各个子进程的源端口号系统是否会保证都不一样?
      

  6.   

    服务端程序每当accept接受连接请求后,在服务端就分配一个SOCKET(可以用数组保存起来),用于和客户端通信,即客户端程序在同一台机器上运行多次,也是没有问题的,因为系统为其分配的端口号是不一样的,所以服务端是可以区分的。lz运行程序后,可以使用netstat -an命令查看端口信息~