【发布时间】:2014-05-11 02:25:55
【问题描述】:
我正在尝试尝试将单个 UDP 消息从一台机器发送到另一台机器。客户端是一个嵌入式 Linux 系统,通过调制解调器连接到互联网。没有防火墙。该服务器是我拥有的公共 VPS 服务器。尽管多次调用客户端,但服务器从未收到任何东西。谁能看出哪里出了问题?
客户:
int main(int argc, char**argv)
{
int sockfd,n;
struct sockaddr_in servaddr,cliaddr;
char sendline[1000];
char recvline[1000];
if (argc != 2)
{
printf("usage: udpcli <IP address>\n");
exit(1);
}
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=inet_addr(argv[1]);
servaddr.sin_port=htons(32000);
sendto(sockfd,"abcd", 4,0,
(struct sockaddr *)&servaddr,sizeof(servaddr));
}
服务器:
int main(int argc, char**argv)
{
int sockfd,n;
struct sockaddr_in servaddr,cliaddr;
socklen_t len;
char mesg[1000];
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(32000);
bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
for (;;)
{
len = sizeof(cliaddr);
printf("calling recvfrom\n");
n = recvfrom(sockfd,mesg,4,0,(struct sockaddr *)&cliaddr,&len);
printf("-------------------------------------------------------\n");
mesg[n] = 0;
printf("Received the following:\n");
printf("%s",mesg);
printf("-------------------------------------------------------\n");
}
}
【问题讨论】:
-
尝试使用
nc -u从您的电脑发送内容。你在服务器上有什么东西吗? -
不,那也没用。
-
好的,现在关闭服务器进程并启动
nc -u -l。回到你的电脑,再试一次nc -u。如果您没有看到任何东西,则很可能正在路上阻止该端口上的数据报。尝试多个端口,直到找到一个可以通过的端口。 -
尝试了一堆不同的端口,但似乎都没有工作。可能是 VPS 提供商阻止了 UDP?
-
可能是。尝试端口
53,通常通过互联网。另外,你确定你有正确的参数nc吗?不想冒犯您,但也许可以在 localhost 上进行试用,以确保您正确使用您拥有的风味?
标签: linux networking udp