C语言UDP程序,不同接口收发信息有关问题

C语言UDP程序,不同接口收发信息问题
我做一个C语言的UDP程序,客户端先给服务器端60000端口发信息,然后服务器端接收到后给我客户端60001的端口发信息,客户端再接受显示出来。请帮忙看看我程序有什么问题?
客户端的
testClient.c
——————————————————————————————————————
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(void)
{
  int sockfd , sockfd2;
  int tolen ,tolen2 , fromlen;
  struct sockaddr_in to_address , to_address2, from_address;
  int result ;
  int ch[3] ;

  sockfd = socket(AF_INET,SOCK_DGRAM,0);
  sockfd2 = socket(AF_INET,SOCK_DGRAM,0);

  to_address.sin_family = AF_INET ;
  //to_address.sin_addr.s_addr = INADDR_ANY ;
  to_address.sin_addr.s_addr = inet_addr("192.168.0.50");
  to_address.sin_port = htons(60000) ;
  tolen = sizeof(to_address);

  bind(sockfd , (struct sockaddr *)&to_address , tolen);

  from_address.sin_family = AF_INET ;
  //to_address.sin_addr.s_addr = INADDR_ANY ;
  from_address.sin_addr.s_addr = inet_addr("192.168.0.50");
  from_address.sin_port = htons(60001) ;
  tolen2 = sizeof(from_address);

  bind(sockfd2 , (struct sockaddr *)&from_address , tolen2);

  printf("A = ");
  scanf("%d",&ch[0]);

  printf("B = ");
  scanf("%d",&ch[1]);

  sendto(sockfd , ch , sizeof(ch) , 0 , (struct sockaddr *)&to_address , tolen);

  recvfrom(sockfd2 , ch , sizeof(ch) , 0 , (struct sockaddr *)&from_address , &tolen2);

  printf("A + B = %d \n",ch[2]); 

  close(sockfd);
  close(sockfd2);
  return 0;
}
——————————————————————————————————————————————
服务器端的:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(void)
{
  int ch[3] ;
  int sockfd, sockfd2;
  int tolen , tolen2, fromlen ;
  struct sockaddr_in to_address, to_address2;
  struct sockaddr_in from_address ;

  sockfd = socket(AF_INET,SOCK_DGRAM,0);
  to_address.sin_family = AF_INET ;
  to_address.sin_addr.s_addr = INADDR_ANY;
  to_address.sin_port = htons(60000) ;

  tolen = sizeof(to_address);
  bind(sockfd , (struct sockaddr *)&to_address , tolen);
  
  sockfd2 = socket(AF_INET,SOCK_DGRAM,0);
  to_address2.sin_family = AF_INET ;
  to_address2.sin_addr.s_addr = inet_addr("192.168.0.36");
  to_address2.sin_port = htons(60001) ;

  tolen2 = sizeof(to_address2);
  bind(sockfd2 , (struct sockaddr *)&to_address2 , tolen2);

  while(1) {
  printf("server waiting\n");

  recvfrom(sockfd , ch , sizeof(ch) , 0 , 
  (struct sockaddr *)&from_address , &fromlen);

  ch[2] = ch[0] + ch[1] ;
printf("A + B = %d \n",ch[2]); 

  sendto(sockfd2 , ch , sizeof(ch) , 0 , (struct sockaddr *)&to_address2 , tolen2);
  }
  return 0;
}
现在服务器端能接受到数据,但客户端不能接收到服务器端回送的数据

------解决方案--------------------
C/C++ code

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(void)
{
  int sockfd;
  int tolen ,tolen2 , fromlen;
  struct sockaddr_in to_address , local_address, from_address;
  int result ;
  int ch[3] ;

  sockfd = socket(AF_INET,SOCK_DGRAM,0);

  local_address.sin_family = AF_INET ;
  local_address.sin_addr.s_addr = INADDR_ANY ;
  local_address.sin_port = htons(60001) ;
  tolen = sizeof(local_address);

  to_address.sin_family = AF_INET ;
  to_address.sin_addr.s_addr = inet_addr("192.168.0.50");
  to_address.sin_port = htons(60000) ;
  tolen = sizeof(to_address);

  bind(sockfd , (struct sockaddr *)&local_address , tolen);

  printf("A = ");
  scanf("%d",&ch[0]);

  printf("B = ");
  scanf("%d",&ch[1]);

  sendto(sockfd , ch , sizeof(ch) , 0 , (struct sockaddr *)&to_address , tolen);

  recvfrom(sockfd , ch , sizeof(ch) , 0 , (struct sockaddr *)&from_address , &tolen2);

  printf("A + B = %d \n",ch[2]);  

  close(sockfd);
  return 0;
}
——————————————————————————————————————————————
服务器端的:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(void)
{
  int ch[3] ;
  int sockfd;
  int tolen , tolen2, fromlen ;
  struct sockaddr_in to_address, local_address;
  struct sockaddr_in from_address ;

  sockfd = socket(AF_INET,SOCK_DGRAM,0);
  local_address.sin_family = AF_INET ;
  local_address.sin_addr.s_addr = INADDR_ANY;
  local_address.sin_port = htons(60000) ;
  tolen = sizeof(local_address);
  bind(sockfd , (struct sockaddr *)&to_address , tolen);
   
  to_address.sin_family = AF_INET ;
  to_address.sin_addr.s_addr = inet_addr("192.168.0.36");
  to_address.sin_port = htons(60001);
  tolen = sizeof(to_address);


  while(1) {
  printf("server waiting\n");

  recvfrom(sockfd , ch , sizeof(ch) , 0 ,  
  (struct sockaddr *)&from_address , &fromlen);

  ch[2] = ch[0] + ch[1] ;
printf("A + B = %d \n",ch[2]);  

  sendto(sockfd2 , ch , sizeof(ch) , 0 , (struct sockaddr *)&to_address , tolen2);
  }
  return 0;
}