이 질문은 another question I just posted과 관련있다. 나는 간단한 작업 프로젝트를 준비 중이며 Unix 개발 환경에서 소켓 프로그래밍의 기초에 익숙해 지려고 노력하고있다. 이 시점에서, 나는 기본적인 서버 측 코드와 클라이언트 측 코드 셋업을 가지고 통신 할 수있다. 현재 클라이언트 코드가 서버 코드에 성공적으로 연결되고 서버 코드가 테스트 메시지를 보내면 둘 다 종료됩니다. 완전한! 그것이 내가 성취하고자했던 것입니다. 이제는 두 환경 (서버 및 클라이언트)에 대한 정보를 얻는 데 사용되는 함수를 사용하고 있습니다. 내 서버 프로그램의 IP 주소를 얻고 싶습니다. 여기에 내가 현재이 작업을 수행해야하는 코드는하지만, 난 무엇을 ...내 서버 프로그램의 IP 주소는 어떻게 얻을 수 있습니까?
server has TCP Port 22513 and IP Address ::
어떤 아이디어가
int sockfd;
unsigned int len;
socklen_t sin_size;
char msg[]="test message";
char buf[MAXLEN];
int st, rv;
struct addrinfo hints, *serverinfo, *p;
struct sockaddr_storage client;
char s[INET6_ADDRSTRLEN];
char ip[INET6_ADDRSTRLEN];
//zero struct
memset(&hints,0,sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
//get the server info
if((rv = getaddrinfo(NULL, SERVERPORT, &hints, &serverinfo) != 0)){
perror("getaddrinfo");
exit(-1);
}
// loop through all the results and bind to the first we can
for(p = serverinfo; p != NULL; p = p->ai_next)
{
//Setup the socket
if((sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1)
{
perror("socket");
continue;
}
//Associate a socket id with an address to which other processes can connect
if(bind(sockfd, p->ai_addr, p->ai_addrlen) == -1){
close(sockfd);
perror("bind");
continue;
}
break;
}
if(p == NULL){
perror("Fail to bind");
}
inet_ntop(p->ai_family, get_in_addr((struct sockaddr *)p->ai_addr), s, sizeof(s));
printf("Server has TCP Port %s and IP Address %s\n", SERVERPORT, s);
... 작동하지 않습니다와 IP의 출력은 항상 비어 있어야 할 곳에 없는?
미리 도움을 청하십시오! 이 물건은 처음에는 정말로 복잡합니다.
부수적으로, 지금 읽고있는 곳을 모르지만 Berkely Sockets에 관한 확실한 출처는 beejs 튜토리얼입니다. http://beej.us/guide/bgnet/ 그렇지 않다면. –