Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

winsock - recv

14K
28 апреля 2006 года
nordmen
19 / / 06.04.2006
программа должна передавать файлы по сети через сокеты используя winsock. если у вас есть примеры или любая инфа по сабжу (без компонент), то поделить плз, очень надо.

а пока что приходится разбираться во всем самому :)
в обшем, использую асинхронный режим (правильно делаю? в синхронном все тормозится) и ловлю сообшения от сокета:
procedure TForm1.WMSocketEvent(var Msg:TMessage);
а что делать при сообшении FD_Accept (пример данных)???
в обших чертах я знаю, но что КОНКРЕТНО делать?

другой комп посылает файл при помоши TransmitFile.
(в msdn написано надо так)
243
29 апреля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by nordmen
программа должна передавать файлы по сети через сокеты используя winsock. если у вас есть примеры или любая инфа по сабжу (без компонент), то поделить плз, очень надо.


Да полно в инете ведь! Искать не пробовал? Даже на этом же сайте: http://www.codenet.ru/progr/inet/TCPIP.php

Цитата:
Originally posted by nordmen
procedure TForm1.WMSocketEvent(var Msg:TMessage);
а что делать при сообшении FD_Accept (пример данных)???
в обших чертах я знаю, но что КОНКРЕТНО делать?

другой комп посылает файл при помоши TransmitFile.
(в msdn написано надо так)


Чего-то не понял. Это где так в msdn написано? Про формы...

14K
29 апреля 2006 года
nordmen
19 / / 06.04.2006
Цитата:
Originally posted by pacific_7
Да полно в инете ведь! Искать не пробовал? Даже на этом же сайте: http://www.codenet.ru/progr/inet/TCPIP.php

Чего-то не понял. Это где так в msdn написано? Про формы...



а при чем тут эта статья? я про передачу файлов, а там передача строки. разные же совсем веши. тем более не в асинхронном режиме т.е. без обработки сообщений.

искал пол дня в инете, нигде не нашел winapi пример передачи данных в инете. все такие умные ))) пишут отрывки из справок, а привести пример как это будет работать не могут :(

а откуда вы взяли msdn+формы? откуда формы???)))

243
29 апреля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by nordmen
а при чем тут эта статья? я про передачу файлов, а там передача строки. разные же совсем веши.


Да? Ты уверен? А помоему с точки зрения витой пары (например) это пофигу. И с точки зрения tcp/ip тоже совершенно пофигу. Разницу только ты видишь, и то она совершенно не принципиальна.
Что есть строка? Последовательность в n байт. Что есть файл? Последовательность в n байт.
Читаем файлик в буфер по кусочкам и отсылаем его через сокет.

Цитата:
Originally posted by nordmen

тем более не в асинхронном режиме т.е. без обработки сообщений.


Чего-то я вообще не понимаю, чего тебе надо. Ты можешь точно описать конечную цель своего проекта?

Цитата:
Originally posted by nordmen
искал пол дня в инете, нигде не нашел winapi


Хм... На http://msdn.microsoft.com не пробовал смотреть?

Цитата:
Originally posted by nordmen
пример передачи данных в инете. все такие умные ))) пишут отрывки из справок, а привести пример как это будет работать не могут :(


А ты не подумал о том, что у людей могут быть какие-то свои дела, кроме того, что бы писать за тебя программу? Тебе вроде ни кто ни чем не обязан, что бы выкладывать сорцы завершенных рабочих проектов.

Цитата:
Originally posted by nordmen

а откуда вы взяли msdn+формы? откуда формы???)))


Да что же это за глупый такой вопрос???

Цитата:
Originally posted by nordmen
TForm1.WMSocketEvent(var Msg:TMessage);
а что делать при сообшении FD_Accept (пример данных)???
в обших чертах я знаю, но что КОНКРЕТНО делать?

другой комп посылает файл при помоши TransmitFile.
(в msdn написано надо так)


Вроде это ты писал и там присутствует предательская подстрока TForm1.

В общем, будут вопросы по делу - спрашивай. Не по делу - это как ты спросил: "где взять готовое, и почему ни кто мне ничего не делает?"

14K
29 апреля 2006 года
nordmen
19 / / 06.04.2006
не понятен всего лишь 1 момент (которого нигде не нашел):
что делает комп при приеме данных с помошью transmitefile с другого компа.
если не сложно, запиши код плз :)
ну серьезно нигде не нашел :(
там есть моменты, которые не очень понятны начинаюшему кодеру, к сожалению у нас не продают книжек по сабжу, а ехать ха ней в москву шас нет времени. (здесь надо советовать мне книги на будущее ;) )

я так понял что в синхронном режиме сервер ждет пока клиент ему передаст файл (accept(...)) и все виснет в ожидании подключения. поэтому надо ловить сообшения от сокета, т.е. асинхроный режим.
просьба поправить плз если что не так, по крайней мере в некоторый статьях так писали.
243
29 апреля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by nordmen
не понятен всего лишь 1 момент (которого нигде не нашел):
что делает комп при приеме данных с помошью transmitefile с другого компа.


Ну я тоже как-то не в курсе что за функция такая. Ты где ее отрыл вообще? Сам могучий гугл о ней почти ничего не знает. Не говоря уж о msdn.

Цитата:
Originally posted by nordmen

если не сложно, запиши код плз :)


Не сложно. Некогда. Завтра буду дома, если не забуду, то выложу - помоему че-то завалялось. Если не удалил :)
Вообще, делай как в статье. Читать файлы умеем с диска? Писать умеем их на диск? Если да, то тут не должно быть проблем - вместо строки в примере подставлять буфер чтения/записи файла. Если не умеем, то читаем матчасть, и повторяем предыдущий пункт.

Цитата:
Originally posted by nordmen
к сожалению у нас не продают книжек по сабжу, а ехать ха ней в москву шас нет времени.


Ну-ну! Не надо мне ля-ля, что типа нужные книжки только в Москве продаются, и вообще - москали зажрались и надо помогать всем. :)
Если бы так было, то я бы щас совсем не в Москве сидел. К сведенью - основы winsock я изучал на модеме в Краснодаре. Который думаю не более развитой, чем твой Смоленск.

Цитата:
Originally posted by nordmen
я так понял что в синхронном режиме сервер ждет пока клиент ему передаст файл (accept(...)) и все виснет в ожидании подключения.


Сделай в потоке и не мучай одно место. То, которым думаешь, что бы ты не подумал чего лишнего.

14K
29 апреля 2006 года
nordmen
19 / / 06.04.2006
Цитата:
Не говоря уж о msdn.


там и нашел, читая про сокеты. я шас за компом где нет msdn, позже скину тебе описание ф-ии.

Цитата:
Не сложно. Некогда. Завтра буду дома, если не забуду, то выложу - помоему че-то завалялось.



Цитата:
Читать файлы умеем с диска?


не знаю как буфер записать в файл, наверно в этом проблема.

Цитата:
Ну-ну! Не надо мне ля-ля, что типа нужные книжки только в Москве продаются, и вообще - москали зажрались и надо помогать всем. :)
Если бы так было, то я бы щас совсем не в Москве сидел. К сведенью - основы winsock я изучал на модеме в Краснодаре. Который думаю не более развитой, чем твой Смоленск.



ни разу не видел у нас книжек по программированию сетки, я серьезно. каждый год езжу за литературой в москву, по крайней мере там дешевле в 1.5 раза и выбор огромен:)
понимаешь, проблема в том что сделать нужно срочно (есть еще 1 день в запасе) и некогда изучать все тонкости или биться головой в стену в поисках решения, плюс куча других дел :(

Цитата:
Сделай в потоке и не мучай одно место


дык если в потоке, все равно все висит :)
в асинхронном режиме надо делать, кажется так правильно.

534
30 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by nordmen
Ну я тоже как-то не в курсе что за функция такая. Ты где ее отрыл вообще? Сам могучий гугл о ней почти ничего не знает. Не говоря уж о msdn.

Плохо ищешь, товарисч! Цитата из msdn:

Цитата:
[SIZE=3]TransmitFile[/SIZE]
The TransmitFile function transmits file data over a connected socket handle. This function uses the operating system's cache manager to retrieve the file data, and provides high-performance file data transfer over sockets.

Note This function is a Microsoft-specific extension to the Windows Sockets specification. For more information, see Microsoft Extensions and Windows Sockets 2.

BOOL TransmitFile(
SOCKET hSocket,
HANDLE hFile,
DWORD nNumberOfBytesToWrite,
DWORD nNumberOfBytesPerSend,
LPOVERLAPPED lpOverlapped,
LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers,
DWORD dwFlags
);

Return Values
If the TransmitFile function succeeds, the return value is TRUE. Otherwise, the return value is FALSE. To get extended error information, call WSAGetLastError. The function returns FALSE if an overlapped I/O operation is not complete before TransmitFile returns. In that case, WSAGetLastError returns ERROR_IO_PENDING or WSA_IO_PENDING. Applications should handle either ERROR_IO_PENDING or WSA_IO_PENDING.

Remarks
The server optimizes the TransmitFile function for high performance. Workstations optimize the function for minimum memory and resource utilization. Expect better performance results when using TransmitFile on Windows Server.

Note TransmitFile is not functional on transports that perform their own buffering. Transports with the TDI_SERVICE_INTERNAL_BUFFERING flag set, such as ADSP, perform their own buffering. Because TransmitFile achieves its performance gains by sending data directly from the file cache. Transports that run out of buffer space on a particular connection are not handled by TransmitFile, and as a result of running out of buffer space on the connection, TransmitFile returns STATUS_DEVICE_NOT_READY.

Вроде всё понятно... Функция просто буферизирует файл автоматически (ну и передаёт его соответственно). Можно и ручками всё то же самое сделать, ничего сложного.

243
30 апреля 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by HarryAxe
Плохо ищешь, товарисч! Цитата из msdn: Вроде всё понятно... Функция просто буферизирует файл автоматически (ну и передаёт его соответственно). Можно и ручками всё то же самое сделать, ничего сложного.


Хы-хы :) Чел неправильно название функции написал, а я глупо скопировал, потому и не нашел ничего. Ну ладно, мне оно и не надо.
Действительно ИМХО надежнее делать ручками, а не через Microsoft-specific. Потом и портировать никуда уже не получится безболезненно.

nordmen - чего там у тебя висит? Ты можешь толком написать, что должно получиться в итоге? ОС реального времени что ли? :) Если висит в потоке, а надо уже завершаться, то киляем поток и делаем что надо. Хотя по идее с чего оно будет висеть, там у тебя файл по 10 байт в минуту что ли передается, что бы висеть?

14K
30 апреля 2006 года
nordmen
19 / / 06.04.2006
Цитата:
nordmen - чего там у тебя висит? Ты можешь толком написать, что должно получиться в итоге? ОС реального времени что ли? :) Если висит в потоке, а надо уже завершаться, то киляем поток и делаем что надо. Хотя по идее с чего оно будет висеть, там у тебя файл по 10 байт в минуту что ли передается, что бы висеть?



var AcceptSocket:integer;
...
AcceptSocket:=SOCKET_ERROR;
while AcceptSocket=SOCKET_ERROR do begin
AcceptSocket:=accept(vListenSocket,nil,nil);
application.processmessages;
CreateThread(nil,0,@SocketThread,0,0,trId);
end;

вот здесь и висит. все делается в отдельном потоке с обыкновенным приоритетом. так же как в статье. никакой отсебятины. до этого ошибо не возникет.

14K
30 апреля 2006 года
nordmen
19 / / 06.04.2006
вот решение http://fun-soft.ra-doersch.de/index.php?mod=forum&kuerzel=archiv&action=thread&id=402&PHPSESSID=lr2gv4b35kal92

только на немецком, +надо преводить на delphi, т.к. там на с++.
в рунете на дельфи решения сабжа НЕТ.
243
01 мая 2006 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by nordmen
вот решение http://fun-soft.ra-doersch.de/index.php?mod=forum&kuerzel=archiv&action=thread&id=402&PHPSESSID=lr2gv4b35kal92

только на немецком, +надо преводить на delphi, т.к. там на с++.
в рунете на дельфи решения сабжа НЕТ.


Ты все таки настаиваешь, что бы мы это сделали за тебя? Еще и на делфах...

14K
01 мая 2006 года
nordmen
19 / / 06.04.2006
Цитата:
Originally posted by pacific_7
Ты все таки настаиваешь, что бы мы это сделали за тебя? Еще и на делфах...



я не настаиваю, но это действительно было бы неплохо.
там я все равно ничего не понял :)

а как передать файл через поток?
src: TFileStream;

src:=TFileStream.Create('c:\file.txt', fmOpenRead);
так например создаем, а как поток получать, отправлять? (используя send, recv)

p.s.: pacific_7, если найдешь что нить у себя, или тут размерешься, прикрепи файлы плз.

14K
03 мая 2006 года
nordmen
19 / / 06.04.2006
вот мой вариант. смотрим и обсуждаем (обязательно напишите коммент, это поможет мне, вам, и всем остальным - сабж слишком интересен, чтобы не уделить внимание)

тока не пинать особо за комментарии в коде. я делал это не себе и нужно было все обьяснять клиенту.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог