Главная страница
    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.004 c
15-1244291308
@!!ex_
2009-06-06 16:28
2009.08.09
Помогите с настройкой Linux а


15-1244202663
KSergey
2009-06-05 15:51
2009.08.09
Параметры (прокси) для аккаутна system


15-1244484954
{RASkov}
2009-06-08 22:15
2009.08.09
Алгоритмы хеширования


6-1205532264
dake
2008-03-15 01:04
2009.08.09
Тунелестроение или back proxy


8-1196371243
leonidus
2007-11-30 00:20
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский