Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 无法在连接到服务器的多个客户端之间发送信息_C_Sockets_Tcp_Network Programming_Client Server - Fatal编程技术网

C 无法在连接到服务器的多个客户端之间发送信息

C 无法在连接到服务器的多个客户端之间发送信息,c,sockets,tcp,network-programming,client-server,C,Sockets,Tcp,Network Programming,Client Server,我有多个客户端连接到服务器。每次服务器向客户端2发送包含客户端1的IP和地址的字符串时,客户端2都会连接到客户端1并向其发送消息 服务器和客户端是本地的;它们具有相同的IP但不同的侦听端口 我收到以下错误:传输终结点已连接 调试后,我认为这是因为相同的IP地址,虽然我不明白为什么它不通过端口连接。客户端2获取客户端1的正确端口 (注意:我省略了错误处理) 代码如下: sockfd = socket(AF_INET, SOCK_STREAM,0); //the one for the ser

我有多个客户端连接到服务器。每次服务器向客户端2发送包含客户端1的IP和地址的字符串时,客户端2都会连接到客户端1并向其发送消息

服务器和客户端是本地的;它们具有相同的IP但不同的侦听端口

我收到以下错误:传输终结点已连接

调试后,我认为这是因为相同的IP地址,虽然我不明白为什么它不通过端口连接。客户端2获取客户端1的正确端口

(注意:我省略了错误处理)

代码如下:

   sockfd = socket(AF_INET, SOCK_STREAM,0); //the one for the server
   sockfd2 = socket(AF_INET, SOCK_STREAM,0); //the one for the client

   //creating client
  client.sin_family = AF_INET;
  client.sin_port = htons(atoi(argv[3])); // the port is read from command line
  client.sin_addr.s_addr = INADDR_ANY;

  //bind
  int b = bind(sockfd2, (struct sockaddr *) &client, sizeof(struct sockaddr));

  //listen
  listen(sockfd2,1); //only 1 client can connect to this one!

  //creating server
  serv_addr.sin_family = AF_INET;
  serv_addr.sin_port = htons(atoi(argv[5])); // the port is read from command line
  inet_aton(argv[4], &serv_addr.sin_addr);


  connect(sockfd, (struct sockaddr*) &serv_addr, sizeof(serv_addr));

  while(1){
  ... // the client connects to the server and gets the string

  destination.sin_family = AF_INET;
  destination.sin_addr.s_addr= inet_addr(address); 
  destination.sin_port = htons(atoi(port));

  //this line gives the error
  if(connect(sockfd2,(struct sockaddr*)&destination, sizeof(destination)<0)
        error("Error connecting");

  //the sending
  n = send(sockfd2, message, strlen(message), 0);
  if(n<0) 
        error("Error sending"); 

  ....


  }
sockfd=socket(AF_INET,SOCK_STREAM,0)//服务器的那个
sockfd2=套接字(AF_INET,SOCK_STREAM,0)//给客户的那个
//创建客户端
client.sinu family=AF\u INET;
client.sin_port=htons(atoi(argv[3]);//从命令行读取端口
client.sin_addr.s_addr=INADDR\u ANY;
//束缚
int b=bind(sockfd2,(struct sockaddr*)和client,sizeof(struct sockaddr));
//听
听(sockfd2,1)//只有一个客户端可以连接到此客户端!
//创建服务器
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(atoi(argv[5]);//从命令行读取端口
inet_aton(argv[4],&serv_addr.sin_addr);
连接(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));
而(1){
…//客户端连接到服务器并获取字符串
destination.sinu family=AF\u INET;
destination.sin\u addr.s\u addr=inet\u addr(地址);
destination.sin_port=htons(atoi(port));
//这一行给出了错误

如果(connect(sockfd2,(struct sockaddr*)和destination,sizeof(destination)
sockfd2
您尝试
connect()
的已绑定,并分配了一个角色(通过
listen
)作为服务器套接字。基本上,它可以执行的唯一有效操作是
接受()
传入连接。

因此,如果我接受,我会收到一个新的sockfd。我可以使用新的sockfd来读/写信息吗?我会尝试一下,看看我得到了什么。