我正在用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] = ' ';
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);
无论在客户端还是服务器端,套接字连接都可以正常工作。
解决方案吗?
但如果我使用另一个IP,如"192.168.1.100"
您确定您的私有ip是192.168.1.100吗?如果没有,请使用命令ipconfig在windows或ifconfig在linux
而且,您的客户机和服务器似乎都在同一台机器上。您尝试过本地主机ip(127.0.0.1)吗?这个ip地址总是指向同一台机器,无论你在哪台机器上。