我正在用C编写程序,我必须使用套接字。 如果我使用通用IP(INADDR_ANY),客户端可以成功建立与服务器的连接,但如果我使用其他IP,如“192.168.1.100”,则连接失败。
服务器 - >
int sock = socket(AF_INET, SOCK_STREAM, 0), fd_sock, dim, dim1;
struct sockaddr_in my_addr, *client = (struct sockaddr_in*) malloc (sizeof(struct sockaddr_in));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.200");
bind(sock, (struct sockaddr *) &my_addr, sizeof(my_addr));
listen(sock, N*N);
while(1){
fd_sock = accept(sock, (struct sockaddr *)client, &dim1);
dim = read(fd_sock, buf, 100);
buf[dim] = '\0';
write(STDOUT_FILENO, buf, dim);
close(fd_sock);
}
close(sock);
客户端 - >
int port = atoi(argv[2]) // I give the port as second argument from code line
char *ip = malloc(15); // I give IP as first argument from code line
strcpy(ip, argv[1]);
int sock = socket(AF_INET, SOCK_STREAM, 0), fd_sock;
struct sockaddr_in my_addr;
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.200");
connect(sock, (struct sockaddr *) &my_addr, sizeof(my_addr));
write(sock, ip, 15);
如果不是
my_addr.sin_addr.s_addr = inet_addr("192.168.1.200");
我用
my_addr.sin_addr.s_addr = inet_addr(INADDR_ANY);
在客户端和服务器上,套接字连接都可以正常工作。
任何解决方案?
答案 0 :(得分:0)
但如果我使用其他IP,例如“192.168.1.100”
你确定你的私人IP是192.168.1.100吗?如果没有通过在Windows中使用命令ipconfig或在linux中使用ifconfig
来确定它 此外,您的客户端和服务器似乎都在同一台机器上。 你试过localhost ip(127.0.0.1)吗?这是一个ip,它总是指向同一台机器,无论你使用哪台机器。