c - Recv一次只能获取8个字符

标签 c sockets networking

因此,我试图找出 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] );
  }
}

最佳答案

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]);

关于c - Recv一次只能获取8个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9144153/

相关文章:

c - 如何统计一个字符符号在文本文件中出现的次数?

python - import ed25519._ed25519 适用于 powershell 但不适用于 GAE

linux - dbus (glib) 和 TCP 的第二个套接字

使用套接字进行 Python 端口转发

java - Java ReSTLet API 可以与 REST PHP API 一起使用吗?

c# - 随项目一起部署数据库

c - 需要帮助修复近似 pi 的算法

c++ - 常数如何表示?

java - 在没有 Apache 的情况下从 301 重定向获取 URL

OSX 10.8 上 Homebrew 软件的 MySQL 错误