![]() |
Проблем с передачей файла в потоках
Передающая сторона
Код:
void thr(void *Pvoid)Код:
void loader(void *Pvoid) |
тут много неправильного.
Про отдающую сторону: структуру SOCKADDR_IN надо обнулить перед использованием (точнее некоторые ее поля) Код:
DWORD e=GetFileSize(f,&ss);потом неправильно организован цикл чтения и выдачи файла. Например вот так неправильно Код:
ReadFile(f,buf,(1024*1024)*10,&rb,0);Зачем здесь вызывается функция SetFilePointer непонятно. еще там используется strlen для бинарных данных, что никак недопустимо с принимающей стороной все еще хуже ошибок очень много |
Во 1х вопрос был именно о проблеме с сокетами а не о других участках клда.
Во 2х если ненравится то предлагаем свой вариант а не критикуем "ваш код плох,а где то есть лутчше" В 3х с принимающей стороны WSAGetLastError вернуло WSAENOTSOCK Порылся глубже.Оказывается ноги растут от WSAEADDRNOTAVAIL на bind свмотрю внимательней вроде как не доглядел ladr.sin_port=3060; а надо ladr.sin_port=htons(3060); Думаю заработает.Не тут то было всеравно упорно выдает WSAEADDRNOTAVAIL :( Методом шаманского тыка обнаружил странную вещь если сделать так ladr.sin_addr.s_addr = inet_addr("127.0.0.1"); то работает.Но почему не катят не inet_addr(INADDR_ANY) не inet_addr(0) ?? |
насчет принимающей стороны
опять же не обнулил структуру ladr. что касается адреса хоста попробуй так: Код:
ladr.sin_addr.s_addr=0;вообще, если ты собираешься просто передавать файл то рекомендуется отправлять его с помощью TransmitFile, это намного легче... |
Цитата:
ЗЫ:мой код без TransmitFile и так нормально работает файлы передаются ,мд5сумм такого файла совпадает с мд5суммой исходного файла |
| Время: 06:18 |