2012-08-30 45 views
0

我建立了一個客戶端(C語言),它試圖連接到服務器(在VB 6.0中),直到連接建立。如果服務器已準備好偵聽,然後運行客戶端程序嘗試連接併發送消息,則它可以正常工作,並且客戶端也會收到響應。 但是,當我們在服務器之前啓動客戶端程序時,它會嘗試在短暫的間隔後連接到服務器,直到它連接(處於無限循環)。當我們打開服務器時,客戶端成功連接到服務器,但不發送消息。在這種情況下,我無法找到問題。 我已經在'wireshark'中檢查過客戶端沒有發送任何消息。如何在客戶端啓動服務器時通過套接字'C'將消息發送到服務器?

當服務器在客戶端之前運行而不是在其他情況下,程序如何正常工作?

請建議如何找到問題。 下面是客戶端程序的代碼:

int 
tcp_send() 
{ 
    int sd, newSd, rc, i, cliSd, servLen, num, k, p; 
    struct sockaddr_in servAddr; 
    struct hostent *h; 
    char si[4]; 
    char line[MAX_MSG]; 
    char message[MAX_MSG]; 
    struct timeval tp; 
    time_t now; 
    char msg[MAX_MSG]; 
    char str[MAX_MSG]; 

    strcpy(msg, "Hello World"); 

    servAddr.sin_family = AF_INET; 
    servAddr.sin_addr.s_addr = inet_addr("111.1.1.11"); 
    servAddr.sin_port = htons(SERVER_PORT); 

    /* create socket */ 
    sd = socket(AF_INET, SOCK_STREAM, 0); 
    if(sd<0) 
    { 
     exit(1); 
    } 
    rc = -1;  
    for (;rc!=0;) 
    { 
     /* connect to server */ 
     rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr)); 
     if(rc<0) 
     { 
      sleep(2); 
     } 

    } 

    memset(message, 0, sizeof(message)); 
    memset(si, 0, sizeof(si)); 
    num = strlen(msg); 
    integertostring(si, num, 4); 
    memcpy(message, si, 4); 
    memcpy(message + strlen(message), msg, strlen(msg)); 

    rc = send(sd, message, strlen(message), 0); 
    if(rc<0) 
    { 
     close(sd); 
     exit(1); 

    } 

    sleep(1); 
    read_line(sd,line); 
    memset(line,0x0,MAX_MSG); 

    return SUCCESS; 
} 
+5

如果沒有看到您的代碼,我們無法辨認任何內容。 –

+0

調試可能嗎? 'send(sd,message,strlen(message),0)'的返回值是什麼? – m0skit0

+0

返回值是15. –

回答

3

嘗試closeconnect後的插座已經失敗,再重新創建它。

+0

謝謝..它的工作。 –

相關問題