在server.cpp我有两个int字段发送到client.cpp。我送了这种方式:使用套接字编程从服务器接收int值
if ((bytecount = send(*csock, portstring1, strlen(portstring1), 0)) == -1) {
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
sprintf(portstring2, "%d", ncount);
if ((bytecount = send(*csock, portstring2, strlen(portstring2), 0)) == -1) {
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
,并在接收端使用:
if((bytecount = recv(hsock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
goto FINISH;
}
printf("Positive counts are :");
printf(" %s \n",buffer);
if((bytecount = recv(hsock, buffer2, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
goto FINISH;
}
printf("Negative count is :");
printf(" %s \n",buffer2);
但问题是,从服务器发送第一REC()函数捕获两个值,并没有达到第二接收功能。当我打印从第一个rec功能收到的数据时,它会显示从服务器发送的两个值。
我尝试使用数组来发送这两个值togather,但然后转换int数组聊天*成为我头痛。因为send和rec函数只处理char *值。甚至没有字符串。
任何想法,我怎么能在客户端得到两个值在不同的水平?
如果你只想*接收* 4个字节,那么在你的第一次调用时指定,而不是'buffer_len'。但是,不要*忽略* bytecount'。所有你保证的是,你至少得到* 1 *字节。因此,您还需要添加一个循环来跟踪您收到的字节数,并在收到您需要的数字后继续询问更多。 –
除非在每个'recv()'之前的某个地方将缓冲区设置为零,否则不要对%s使用'printf()'。你不会在“整数”字符串后面发送空字符,因为'strlen()'排除了它。 – thuovila
@Damien_The_Unbeliever:字节大小不能被限制,每次可能会有所不同!对于我的案例 – user123