В настоящее время у меня есть клиент-серверная реализация кода C.Я много сделал, чтобы следить за различными книгами и реализациями, и в конечном итоге это не работает.
Ссылаясь на приведенные ниже операторы "printf", я могу сказать, что клиент успешно отправляет сообщение, но сервер никогда не проходит этап приема (даже после того, как клиент предположительно преуспел в отправке).
Так что в конечном итоге у меня складывается впечатление, что что-то связано с тем, как мой сервер получает код, или с форматированием того, что я отправляю (когда я говорю это, я имею в виду, что мне, возможно, не хватает \ 0 или \ r\ n или что-то еще, хотя я считаю, что я включаю их совершенно анально).
Вот соответствующий код с очень удаленным:
SERVER:
int Server::update(char *getbuf)
{
...
// ACCEPT
clientsocket = accept(serversocket, (struct sockaddr *)&client_address, &alen);
if(!clientsocket)
logger.fail("Accept Fail");
else
logger.info("Accept succeed");
z = recv (clientsocket, sbuf, sSize, MSG_DONTWAIT);
snprintf(&sbuf[z], sSize-z, "\r\n\0");
snprintf(getbuf, sSize, sbuf);
logger.data("Received: %s",sbuf);
respond(getbuf);
return TRUE;
}
returnFALSE;
}
void Server::respond(char *response)
{
// SEND
ssize_t z;
int sSize = 64;
char sbuf[sSize];
snprintf(sbuf, sSize, response);
snprintf(&sbuf[z], sSize-z, "\r\n\0");
z = send(clientsocket, sbuf, sSize, 0);
if (z < 0)
fprintf(stderr,"send failure\n");
else
logger.info("Send Succeed");
}
CLIENT
Code:
int main(int argc, char **argv)
{
...
z = connect(com_socket, (struct sockaddr *) &server_address, sizeof(server_address));
if(z == -1)
{
if(errno == EINPROGRESS)
{
fprintf(stderr, "EINPROGRESS non block start\n");
}
if(errno == EALREADY)
{
fprintf(stderr, "EALREADY non block subsequent request\n");
}
fprintf(stderr, "Connect failed\n");
}
else
printf("Connect Success\n");
int sSize = 64;
char sbuf[sSize];
z = snprintf(sbuf, sSize, command);
snprintf(&sbuf[z], sSize-z, "\r\n\0");
// SEND
z = send(com_socket, sbuf, sSize, 0);
if (z < 0)
fprintf(stderr,"send failure\n");
else
printf("Send Succeeded\n");
// READ
z = recv(com_socket, sbuf, sSize, MSG_DONTWAIT);
if (z < 0)
fprintf(stderr,"receive failure\n");
else
printf("Receive Succeeded\n");
snprintf(&sbuf[z], sSize-z,"\r\n\0");
// Output
printf("Received Response: %s\n", sbuf);
close(com_socket);
exit(1);
}