Я пишу сервер-клиентскую программу на C. Клиент отправляет команду серверу в виде 5 байтов: первый байт - это операция, а следующие 4 байта являются ключом для выполнения операции.C: странное поведение между клиентом и сервером
Сервер выглядит примерно так:
int nowread, key;
while(1)
{
char buffer[1024];
int alreadyread = 0;
do
{
nowread = read(socket,buffer+alreadyread,5-alreadyread);
alreadyread += nowread;
}
while((nowread > 0) && (5-alreadyread > 0));
if(nowread == -1 || nowread == 0)
{
printf("Error reading from client socket\n");
exit(1);
}
key = (((int)buffer[1])<<24 | ((int)buffer[2])<< 16 | ((int)buffer[3]) << 8 | ((int)buffer[4]) << 0);
printf("%d, key from server \n",key); // just for debugging
//DO COMMAND
Я тестировал программу, имея клиента отправить 10 команд:
op: 1, num: 645110
op: 2, num: 419811
op: 0, num: 115300
op: 2, num: 792023
op: 2, num: 146624
op: 1, num: 842346
op: 1, num: 450778
op: 0, num: 550046
op: 1, num: 284186
op: 2, num: 691858
И я получаю от сервера:
-10, key from server
-29, key from server
-15772, key from server
-41, key from server
-64, key from server
-9622, key from server
-38, key from server
-98, key from server
284186, key from server
-110, key from server
Как вы можете видеть, только один ключ соответствует, что очень странно (либо они должны совпадать, либо нет) , Я на 100% уверен, что это серверный сервер, а не проблема с клиентом. Кто-нибудь знает, что может быть причиной этого?
Заранее спасибо.
EDIT: Это код, который посылает данные
uint32_t net_num = htonl(num);
int nsent = 0;
while (nsent < 4)
{
rc = write(sockfd,&net_num + nsent, 4 - nsent);
if (rc <= 0)
{
printf("error! write() failed: %s\n", strerror(errno));
break;
}
nsent += rc;
}
if (rc <= 0)
break;
Как вы * отправить * данные? –
Очень важно, чтобы вы отображали код, который отправляет данные. Возможно, вы сталкиваетесь с проблемами, связанными с контентом, или с другими незначительными проблемами. –
Я отредактировал его. –