假设有两台 linux 机器位于两个不同的网络中,具有以下配置
Node1 Node2
IPaddr(private) 192.168.0.14 10.25.3.75
Router modem's IP(real) 1.2.3.4 5.6.7.8
Netmask (real) 255.255.0.0 255.255.192.0
Router modem's IP(priv) 192.168.0.1 10.0.20.1
Netmask (priv) 255.255.255.0 255.0.0.0
下面是一个通用的 UDP(客户端)套接字代码C
(不包括错误检查以节省问题的空间)。假设可以在node1
. 我的问题是,我需要如何node2
在下面的代码上定义,我还需要编辑什么,以便 UDP 数据包node1 to node2
可以毫无问题地传递?
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#define SRV_IP "5.6.7.8"
int main(){
struct sockaddr_in serv_addr;
int sockfd, i, slen=sizeof(serv_addr);
char buf[512] = "hello";
sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
bzero(&serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(1234);
inet_aton(SRV_IP, &serv_addr.sin_addr);
sendto(sockfd, buf, BUFLEN, 0, (struct sockaddr*)&serv_addr, slen);
close(sockfd);
return 0;
}
我假设 UDP 服务器部分 (on node2
) 是通用代码,不需要任何特定修改即可从 接收数据包node1
,是吗?