C에서 간단한 서버/클라이언트 프로그램을 작성하고 있습니다. 어디서나 액세스 할 수있는 IP 포트를 열려고합니다. 현재, 내 서버는 127.0.0.1
(로컬 시스템)과 0.0.0.0
(잘 모르겠다) 이외에는 작동하지 않습니다. IP_TRANSPARENT
옵션을 지정했는데 클라이언트를 제외하고 모두 여전히 connect
에서 실패합니다.외부 IP에 connect()가 작동하지 않습니다.
서버 :
// definitions, everything
struct addrinfo hints, *res;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("192.168.1.1","4001",&hints,&res);
sockfd = socket(res->ai_family,res->ai_socktype,res->ai_protocol);
setsockopt(sockfd,IPPROTO_IP,IP_TRANSPARENT,(void*)&sockopt,sizeof(sockopt));
bind(sockfd,res->ai_addr,res->ai_addrlen);
listen(sockfd,0);
addr_size = sizeof(ext_addr);
extfd = accept(sockfd,(struct sockaddr *)&ext_addr,&addr_size);
write(extfd,"Success",7);
// cleanup
클라이언트 :
// definitions, everything
struct sockaddr_in serv_addr;
sockfd = socket(AF_INET,SOCK_STREAM,0);
setsockopt(sockfd,IPPROTO_IP,IP_TRANSPARENT,(void*)&sockopt,sizeof(sockopt));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(4001);
inet_pton(AF_INET,"192.168.1.1",&serv_addr.sin_addr);
connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)); // fails here
read(sockfd,rcvBuf,sizeof(rcvBuf)-1);
// clean up
내 문제가 무엇
? 나는 편의를 위해 오류 검사를 꺼냈다. 서버가 정상적으로 실행됩니다. 클라이언트는 127.0.0.1로 정상적으로 실행됩니다.
서버의 IP 주소는 192.168.1.1입니까? – immibis