Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.09;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
2-1244658173
aha
2009-06-10 22:22
2009.08.09
Интересует есть ли готовые компоненты , позволяющие получать


2-1244711390
Petr
2009-06-11 13:09
2009.08.09
Поиск числа


2-1244782779
Arcticcat
2009-06-12 08:59
2009.08.09
Помогите с TFilestream


1-1211919215
@!!ex_
2008-05-28 00:13
2009.08.09
Home Folder текущего пользователя.


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