同样是在写c++的server,socket需要recv(),用char[] buffer存储读取的字节。
char buffer[BUFFER_SIZE];
n = recv(clntSocket, buffer, BUFFER_SIZE, 0)
这里的buffer在每次读取之前必须清空!必须清空!必须清空!必须清空!必须清空!必须清空!必须清空!
因为读取的时候不一定填满BUFFER_SIZE,举例来说,如果只读了10,那么下次再读取5,剩下的10 - 5 = 5就是脏数据。所以导致时而能过test case时而不能过。
正确做法是,在n = recv()之前,先:
memset(buffer, 0, BUFFER_SIZE);