1.如果十个线程,只有一个socket,每个线程要频繁的进行send 和 recv,例如    发送函数:
   if(select(sockfd + 1, NULL, &allset, NULL, &tv) <= 0) 
   {
    return -1;
   }
   send(sockfd, (char *)buf, len, 0);   接收函数
   if(select(sockfd + 1, &allset,NULL, NULL, &tv) <= 0) {
    return -1;
   }  rlen = recv(sockfd, (char *)buf, 1024, 0);请问一个线程的recv是否会接收到其他线程的数据?也就是recv是否会接受错误?
2.如果十个线程,创建十个socket,每个线程也要频繁的进行send 和 recv,函数如上
  recv是否会接受错误?
recv和send的长度不同有否影响?我已经确定单线程执行是没有问题的,谢谢

解决方案 »

  1.   

    不明白你说的接收错误是怎么定义的
    难道说一个发送线程必须对应一个接收线程吗?
    recv是在服务器端,send是在客户端,这两者之间的线程没有联系
    服务器端只要能接收到客户端的数据就行,无所谓对错的
      

  2.   

    1.不会应为sockfd不一样的啊。都是表示client的
    2 tcp的话理论上是不会出错的
      

  3.   

    我的recv,send都在客户端,发一个send,我要马上要接收send的返回值,所以一组send与recv是对应的,
    因为recv,send都在客户端,所以十个线程频繁发送send会不会导致recv接收混乱,因为接收长度和send的长度也不同
      

  4.   

    用多线程试试,recv在线程里面
      

  5.   

    我现在的情况recv与send同在一个线程里,如果单线程操作的话发送接收正常,但多线程操作就失败,
    因为没有办法测试是不是接收错误,所以发帖请教一下
      

  6.   

    只要多个线程不是从同一socket接收数据就没问题。
      

  7.   

        因为我在客户端执行Send后马上接着执行Recv来接收服务器发送的返回值(send后服务器响应信息),当十个进程频繁进行send和recv时,在一个进程里如何保证Recv接收的是该进程的上一条语句Send的返回数据而不是其他进程的Send的返回数据呢?
      

  8.   

    据我的经验,用线程通信,一个客户端的send命令发出后,服务器端没有处理完该响应之前,不能再处理其他的send响应了。应该不会出现串花的问题。
      

  9.   

    只要socket套结字不一样,就不会出现混乱