0
我正在嘗試將單個UDP消息從一臺機器發送到另一臺機器。客戶端是通過調制解調器連接到互聯網的嵌入式Linux系統。沒有防火牆到位。服務器是我擁有的公共VPS服務器。儘管多次調用客戶端服務器從未收到任何東西。任何人都可以看到有什麼可能會出錯?爲什麼這個UDP客戶端/服務器代碼不工作?
客戶端:
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'從您的電腦發送內容。你在服務器上得到了什麼? – cnicutar
沒有,也沒有工作。 –
好的,現在關閉服務器進程,而是啓動'nc -u -l'。回到你的電腦,再試一次'nc -u'。如果你沒有看到任何東西,它可能會阻塞該端口上的數據報。嘗試使用多個端口,直到找到可以通過的端口。 – cnicutar