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语言的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; }