{
if((sConnect=accept(sListen,(SOCKADDR*)&addr,&addrlen)) != INVALID_SOCKET)
{
char buf[500];
int len = strlen(buf);
recv(sConnect,buf,len,0);
}
Вероятно, вам не следует повторно использовать addr
, чтобы найти адрес входящих соединений. В этом может не быть ничего неправильного , но знание того, что вы использовали одну и ту же переменную для двух разных вещей в вашей программе, становится сложнее с ростом вашей программы. Дайте каждой переменной определенную задачу и используйте переменные только по очень веской причине.
Но проблема, скорее всего, в том, что strlen(buf)
позвонит. Ничто не обнулило char buf[500]
, которое вы выделили в стеке. Ваш strlen()
может вернуть 0
, если в этом месте случайно находился 0
байт, или он может вернуть 2000
, если это количество байтов, которое он должен просмотреть, прежде чем найти 0
байт. , (Я думаю, что-то вроде 12
будет обычным делом. :) Вы можете использовать sizeof buf;
, но это может быть хрупким, если вы передумаете в будущем и выделите массив, используя malloc
. Поэтому просто используйте константу как для длины в распределении, так и для вызова recv()
. Это будет сложнее пропустить, когда вы решите сделать его динамичным в будущем.