我创建了一个客户端(在 C 中),它试图连接到服务器(在 VB 6.0 中),直到建立连接。如果服务器准备好监听,然后我们运行客户端程序尝试连接并发送消息,它工作正常并且客户端也收到响应。但是当我们在服务器之前启动客户端程序时,它会在很短的时间间隔后尝试连接到服务器,直到它被连接(在无限循环中)。当我们打开服务器时,客户端成功连接到服务器但没有发送消息。在这种情况下,我无法找到问题所在。我已经检查了客户端没有发送任何消息的“wireshark”。
当服务器在客户端之前运行而不是在其他情况下,程序为什么运行良好?
请建议如何找到问题。这是客户端程序的代码:
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;
}