2013-04-14 5 views
0

다음은 Heroku 및 AppFog에서 호스팅되는 node.js TCP 서버 코드입니다. 내 클라이언트는 C로 작성되었으며 단순히 서버에 메시지를 보내고 응답을받습니다. 로컬 서버를 호스트 할 때 제대로 작동합니다. 그러나 온라인 서버에 연결하려고하면 클라이언트가 실패합니다 ("ERROR connecting : Operation timed out"). 어떤 생각이 들었습니까?Node.js Heroku/AppFog의 TCP 서버

서버 (Node.js를) : (http://www.linuxhowtos.org/C_C++/socket.htm에서 C)

var net = require('net'); 

var server = net.createServer(function (socket) { 
    socket.on("data", function(data){ 
    socket.write(data.toString()); 
    }); 
}); 

var port = process.env.VCAP_APP_PORT || 8081; 
console.log(port); 
server.listen(port); 

클라이언트 : 클라이언트는 항상 80에 관계없이 어떤 process.env.VCAP_APP_PORT의 포트에 연결해야합니다

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include <netdb.h> 

void error(const char *msg) 
{ 
    perror(msg); 
    exit(0); 
} 

int main(int argc, char *argv[]) 
{ 
    int sockfd, portno, n; 
    struct sockaddr_in serv_addr; 
    struct hostent *server; 

    char buffer[256]; 
    if (argc < 3) { 
     fprintf(stderr,"usage %s hostname port\n", argv[0]); 
     exit(0); 
    } 
    portno = atoi(argv[2]); 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) 
     error("ERROR opening socket"); 
    server = gethostbyname(argv[1]); 
    if (server == NULL) { 
     fprintf(stderr,"ERROR, no such host\n"); 
     exit(0); 
    } 
    bzero((char *) &serv_addr, sizeof(serv_addr)); 
    serv_addr.sin_family = AF_INET; 
    bcopy((char *)server->h_addr, 
     (char *)&serv_addr.sin_addr.s_addr, 
     server->h_length); 
    serv_addr.sin_port = htons(portno); 
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) 
     error("ERROR connecting"); 
    while (1){ 
    printf("Please enter the message: "); 
    bzero(buffer,256); 
    fgets(buffer,255,stdin); 
    n = write(sockfd,buffer,strlen(buffer)); 
    if (n < 0) 
     error("ERROR writing to socket"); 
    bzero(buffer,256); 
    n = read(sockfd,buffer,255); 
    if (n < 0) 
     error("ERROR reading from socket"); 
    printf("%s\n",buffer); 
    } 
    close(sockfd); 
    return 0; 
} 
+0

내 로컬 컴퓨터에서 코드를 실행했는데 성공했습니다. 시간 초과는 서버에 연결할 수 없음을 나타냅니다. 올바른 주소를 사용하고 액세스가 허용되는지 확인하십시오. – user568109

답변

0

로 설정되어 . AppFog는 포트 80에서 앱이 실행되는 포트로 요청을 프록시합니다.

+0

내 요청을 포트 80으로 변경했으며 이번에는 서버에 연결했습니다. 그러나 서버는 여전히 어떤 데이터도 얻을 수 없었습니다. –