我建立了一個客戶端(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;
}
如果沒有看到您的代碼,我們無法辨認任何內容。 –
調試可能嗎? 'send(sd,message,strlen(message),0)'的返回值是什麼? – m0skit0
返回值是15. –