C TCP 클라이언트 - 서버을 만들고 외부 PC에서 액세스하려고합니다. 키의 값을 저장할 수있는 Store입니다. 코드는 다음과 같습니다. 나는 그것을 연결할 수
있는 유일한 방법은 ./file_server 8080
를 실행 한 후 다른 터미널 사용에 연결하는 것입니다 ./file_client 127.0.0.1 8080
을하지만 내 현재의 IP, 그냥 루프와 결코 연결하지 ..내 C 서버에 원격으로 어떻게 연결할 수 있습니까?
CLIENT.C를 사용하는 경우
//create the socket using socket fucntion
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
error("ERROR opening socket");
}
//gethostbyname: get the server's DNS entry
server = gethostbyname(hostname);
if (server == NULL) {
fprintf(stderr,"ERROR, no host named %s\n", hostname);
exit(-1);
}
//build the server's Internet address
bzero((char *) &serveraddr, sizeof(serveraddr));
serveraddr.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&serveraddr.sin_addr.s_addr, server->h_length);
serveraddr.sin_port = htons(portno);
//Create a connexion with the server
if (connect(sockfd, &serveraddr, sizeof(serveraddr)) < 0) {
error("ERROR connecting");
}`
SERVER.C
parentfd = socket(AF_INET, SOCK_STREAM, 0); //Create the parent
socket to be able to loop until a connexion is etablished.
if (parentfd < 0) {
error("ERROR opening socket");
}
optval = 1;
setsockopt(parentfd, SOL_SOCKET, SO_REUSEADDR, (const void *)&optval , sizeof(int));
bzero((char *) &serveraddr, sizeof(serveraddr)); //Build server's internet address
serveraddr.sin_family = AF_INET; //Internet address
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); //our IP
serveraddr.sin_port = htons((unsigned short)portno); //Port we will listen on
//Associate the parent socket' address to a port
if (bind(parentfd, (struct sockaddr *) &serveraddr, sizeo
error("ERROR on binding");
}
//We make this socket ready to accept multiples requests (5 here)
//It will be useful for the next TP. Here it's not necessary because we will listen to 1 client at a time.
if (listen(parentfd, 5) < 0) {
error("ERROR on listen");
}
clientlen = sizeof(clientaddr);
N.B. * gethostbyname *(), gethostbyaddr *(), herror() 및 hstrerror() 함수는 더 이상 사용되지 않습니다. 응용 프로그램은 getaddrinfo (3), getnameinfo (3) 및 gai_strerror (3)를 사용해야합니다. * 마찬가지로, * getaddrinfo 함수가 도입되어 gethostbyname 함수가 사용되지 않습니다. Windows 소켓 2 응용 프로그램을 만드는 개발자는 gethostbyname 대신 getaddrinfo 함수를 사용해야합니다. * – red0ct