Вы пропускаете одну круглую скобку:
while(bytes = recv(newsockfd ,buffer , sizeof(buffer) ,0) > 0)
, что делает bytes
переменной 1 или 0, потому что выражение вычисляется как recv(newsockfd ,buffer , sizeof(buffer) ,0) > 0
, хотя число прочитанных байтов является правильным.Добавьте круглые скобки так:
while ((bytes = recv(newsockfd ,buffer , sizeof(buffer) ,0)) > 0)
^ ^
Пропустил это, но то же самое относится и к вашему клиенту, вы читаете все байты в буфер, но переменной bytes
снова присваивается 1, так как
while(bytes = fread(buffer ,sizeof(char) , sizeof(buffer) ,f)>0)
оценивается следующим образом:
while(bytes = (fread(buffer ,sizeof(char) , sizeof(buffer) ,f)>0) )
^
1. call fread, keep the result in temporary place (let's call it X)
^
2. compare "x" to 0
^
3. store result of comparison (instead of fread) in the variable bytes.
означает, прочитайте sizeof(buffer)
байт из файла, если число прочитанных байтов больше 0, поместите 1 в bytes
,иначе поставьте 0 (результат логического выражения равен 1 (true) или 0 (false)), поэтому даже если вы прочитаете 100 байтов, буфер действительно заполнен ими, но переменная bytes
равна 1 , поэтому вы отправляете 1 байт .когда вы пытаетесь читать снова, читать нечего, так как в прошлый раз вы уже прочитали 100 байтов .Из-за лишних скобок сначала присваивается число считанных байтов переменной bytes
, а затем сравнивается с 0:
while((bytes = fread(buffer ,sizeof(char) , sizeof(buffer) ,f))>0)