Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];

Вниз

Асинхронные сокеты   Найти похожие ветки 

 
prodex   (2008-03-14 06:04) [0]

Сокращенный код:
...
  ServSock:=Socket(AF_Inet,SOCK_STREAM,IPPROTO_TCP);
  Addr.sin_family:=AF_Inet;
  Addr.sin_addr.S_addr:=InAddr_Any;
  Addr.sin_port:=HToNS(4000);
  FillChar(Addr.sin_zero,SizeOf(Addr.sin_zero),0);
  Bind(ServSock,Addr,SizeOf(Addr));
  Listen(ServSock,SOMAXCONN);
  WSAAsyncSelect(ServSock,Handle,WM_SSocketEvent,FD_Read or FD_Accept or FD_Close or FD_Connect);
...
//Отправка сообщения
...
Addr.sin_family:=AF_Inet;
Addr.sin_addr.S_addr:=Inet_Addr("localhost");
Addr.sin_port:=HToNS(4000);
Connect(ServSock,Addr,SizeOf(Addr));
FStr:=TFileStream.Create("D:\111.xls",fmOpenRead);
SetLength(OutBuf,FStr.Size);
FStr.Position:=0;
FStr.ReadBuffer(OutBuf[0],FStr.Size);
n:=FStr.Size;
Send(ServSock,OutBuf[0],n,0);
...

Так вот при инициализации сокета как SOCK_STREAM после connect(...) WSAGetLastError возвращает ошибку WSAEINVAL : "The socket is already bound to an address." (Как указано в справке). Но при инициализации как SOCK_DGRAM все работает без проблем. И ещё вопрос: при SOCK_STREAM данные тож передаются пакетами не более какого-то размера?


 
Сергей М. ©   (2008-03-14 10:19) [1]


> Connect(ServSock


Серверное гнездо никогда не является инициатором соединения, это право и обязанность клиентского гнезда.


> при SOCK_STREAM данные тож передаются пакетами не более
> какого-то размера?


У потока (SOCK_STREAM) нет размера, поток он и есть поток.

А буфер передачи действительно имеет фиксированный размер, по умолчанию он = 8к


 
grisme   (2008-03-14 11:51) [2]


> //Отправка сообщения... Addr.sin_family:=AF_Inet; Addr.sin_addr.
> S_addr:=Inet_Addr("localhost"); Addr.sin_port:=HToNS(4000);
>  Connect(ServSock,Addr,SizeOf(Addr)); FStr:=TFileStream.
> Create("D:\111.xls",fmOpenRead); SetLength(OutBuf,FStr.Size);
>  FStr.Position:=0; FStr.ReadBuffer(OutBuf[0],FStr.Size);
>  n:=FStr.Size; Send(ServSock,OutBuf[0],n,0);...


во-первых, ^^^ странные действия. какой-такой connect для ServSock? O_o и, тем более, Send для ServSock.
во-вторых, Ketmar меня правильно пнул, асинхронный режим -- это полная бяка. работай в блокирующем режиме + threads


 
Сергей М. ©   (2008-03-14 12:02) [3]


> асинхронный режим -- это полная бяка


Не парь людям мозги)
Любой режим имеет как свои преимущества, так и недостатки, все зависит от конкретных условий применения.


 
DVM ©   (2008-03-14 16:32) [4]


> асинхронный режим -- это полная бяка

Зато этот режим лучше всего укладывается в событийную идеологию Windows.

Посмотри на ICS, говорят сервера держат десятки тысяч соединений в одном потоке и все работает. В то же время представь себе десятки тысяч потоков (например на базе Indy). Сомневаюсь, что в случае десятка тысяч потоков все вообще будет нормально работать. Я уж молчу о корректном завершении всего этого дела и синхронизации если она нужна.


 
SpellCaster   (2008-03-14 17:42) [5]

Да, но дебажить все это дело - убиться можно. К тому же процесс подключения, например, к сокс-проксе превращается в некий клубок макарон %).


 
Сергей М. ©   (2008-03-14 19:19) [6]


> дебажить все это дело - убиться можно


Да ты что ?!)

А мужики-то и не знают !..)...


 
piople ©   (2008-03-17 06:36) [7]

Синхронные, ассинхронные, все зависит от задачи...


> prodex   (14.03.08 06:04)  

http://www.citforum.ru/book/cook/winsock.shtml

Файлы передаются точно так же, разве что надо пакеты в кучу склеить. К тому же еслы ты собираешся работать с ассинхронными сокетами, то тебе, на мой взгляд, приедтся туго. Ибо передавать файлы в синхронном режиме ИМХО проще...



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.057 c
15-1244012984
oldman
2009-06-03 11:09
2009.08.09
Internet Explorer 8.0 Windows XP (yandex edition)


15-1244210713
evgenij
2009-06-05 18:05
2009.08.09
значение переменных


15-1244467705
blackman
2009-06-08 17:28
2009.08.09
Дамп MySql в в Access


2-1243941065
Franzy
2009-06-02 15:11
2009.08.09
В Delphi точно нет конструктора массивов?


2-1244723611
bot77
2009-06-11 16:33
2009.08.09
Перевод файла в троичной системе в аски и обратно.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский