因此,我试图找出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] );
}
}
最佳答案
该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 - 接收一次只能获得8个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9144153/