我正在编写一个简单的客户端程序,它连接到ip地址“172.31.1.34”并发送消息。一切正常,但我无法接收来自服务器的任何消息。错误显示“没有主机路由”。 我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main()
{
struct sockaddr_in server,client;
int s1,s2,len;
int n;
char buffer[500];
strcpy(buffer,"GET http://172.31.1.34/ HTTP/1.0\n\n");
bzero((char *)&client,sizeof(client));
client.sin_port = htons(80);
client.sin_addr.s_addr = inet_addr("172.31.1.34");
client.sin_family = AF_INET;
s2 = socket(AF_INET,SOCK_DGRAM,0);
if(connect(s2,(struct sockaddr *)&client,sizeof(client)) == -1) {
perror("can't connect\n");
exit(1);
}
n = send(s2,buffer,strlen(buffer),0);
if(n < 0) {
perror("message not sent");
exit(1);
}
while(1) {
memset(buffer,0,sizeof(buffer));
n = recv(s2,buffer,500,0);
if(n < 0) {
perror("coudnot read");
exit(1);
}
buffer[n] = '\0';
printf("%s",buffer);
}
close(s2);
return 0;
}
答案 0 :(得分:0)
我只是简单地查看了你的代码,但乍一看似乎没问题。但是我会从显而易见的开始 - 也许没有通往主持人的路线......
假设您使用的是Linux或其他Unix平台(包括OSX),我会执行以下操作:
ping 172.31.1.34
。请注意,这并不能保证主机不可用,因为ping可能会被阻止。telnet 172.31.1.34
。这应该连接,您可以直接输入您的HTTP查询tcptraceroute 172.31.1.34 80
如果所有这些都失败了,那就是网络,而不是你的代码。
在OSX上,您可以从&#34; homebrew&#34;安装tcptraceroute。在Linux上使用您的普通包管理器(或询问您的系统管理员)。
答案 1 :(得分:0)
您为什么使用SOCK_DGRAM
?那是UDP数据包。 HTML使用TCP。您应该使用SOCK_STREAM
答案 2 :(得分:0)
请尝试以下代码:
client.sin_addr.s_addr = inet_addr("172.31.1.34");
inet_pton(AF_INET, "172.31.1.34", &client.sin_addr);