无法在C

时间:2015-05-16 10:08:32

标签: c sockets

我正在用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);

在客户端和服务器上,套接字连接都可以正常工作。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

但如果我使用其他IP,例如“192.168.1.100”

你确定你的私人IP是192.168.1.100吗?如果没有通过在Windows中使用命令ipconfig或在linux中使用ifconfig

来确定它 此外,您的客户端和服务器似乎都在同一台机器上。 你试过localhost ip(127.0.0.1)吗?这是一个ip,它总是指向同一台机器,无论你使用哪台机器。