Recv получает только 8 символов одновременно - PullRequest
1 голос
/ 05 февраля 2012

Итак, я пытаюсь выяснить библиотеку сокетов в C, и у меня возникают проблемы с чтением сообщений с использованием recv.Кажется, что когда сервер получает сообщение, он всегда читает 8 символов, независимо от отправленного сообщения или размера буфера (при условии, что его> = 8).

Кроме того, быстрая отправка сообщенийпоследовательность делает так, что только первое сообщение проходит, есть ли время сброса, и я неправильно закрываю сокет?

Вот мой код сервера на данный момент:

void main( void ) {
  printf( "Starting Server...\n" );
  int sock = socket( AF_INET, SOCK_STREAM, 0 );

  struct sockaddr_in server, client;

  server.sin_family = AF_INET;
  server.sin_port = htons( 3030 );
  server.sin_addr.s_addr = htonl( INADDR_ANY );

  bind( sock, (const struct sockaddr*)&server, sizeof( server ) );
  listen( sock, 5 );

  while ( 1 ) {
    int cli_len = sizeof( client );
    int client_socket = accept( sock, (struct sockaddr*)&client, &cli_len );
    conn_made( client_socket );
  }
}

int conn_made( int client ) {
  printf( "Connection Made...\n" );
  char *buff = malloc( 1024 );
  recv( client, buff, 1024, 0);

  int i = 0;
  for ( i = 0; i < sizeof( buff ); i++ ) {
    printf( "%d byte: %d\n", i, buff[i] );
  }
}

1 Ответ

4 голосов
/ 05 февраля 2012
for ( i = 0; i < sizeof( buff ); i++ ) {
    printf( "%d byte: %d\n", i, buff[i] );
}

Что sizeof совершенно неправильно.Он получит размер указателя на вашем компьютере (этот размер постоянен). Вы должны получить количество полученных байтов и затем распечатать их.

Попробуйте это:

ssize_t sz;
sz = recv(client, buff, 1024, 0);
if (sz < 0) {
    perror("recv");
    return -1;
}

for (i = 0; i < sz; i++)
    printf("%d byte: %d\n", i, buff[i]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...