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

Вниз

socket+ctBlocking   Найти похожие ветки 

 
kostik78ua   (2003-01-24 09:47) [0]

Помогите разобраться с сокетами.
На форму поместил ServerSocket1 (stNonBlocking) и 6 ClientSocket-ов (ctBlocking).

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Port:=1234;

ClientSocket1(..6).Port:=1234;
ClientSocket1(..6).Host:="localhost";

ServerSocket1.Open;
ClientSocket1(..6).Open;
end;

В результате 5 коннектов проходят, а на шестом выдает 10061 ошибку (Подключение не установлено).

Интересно, что при ClientSocket1.ClientType = ctNonBlocking; соединений может быть сколько угодно (больше пяти).

Объясните почему и как с этим бороться!


 
Digitman ©   (2003-01-24 10:04) [1]

приведи-ка ты полный код)


 
kostik78ua   (2003-01-24 10:12) [2]

procedure TForm1.Button1Click(Sender: TObject);
begin
ss.Port:=1234;
ss.ServerType:=stNonBlocking;
ss.Open;

cs1.Port:=1234;
cs2.Port:=1234;
cs3.Port:=1234;
cs4.Port:=1234;
cs5.Port:=1234;
cs6.Port:=1234;

cs1.Host:="localhost";
cs2.Host:="localhost";
cs3.Host:="localhost";
cs4.Host:="localhost";
cs5.Host:="localhost";
cs6.Host:="localhost";

cs1.ClientType:=ctBlocking;
cs2.ClientType:=ctBlocking;
cs3.ClientType:=ctBlocking;
cs4.ClientType:=ctBlocking;
cs5.ClientType:=ctBlocking;
cs6.ClientType:=ctBlocking;

cs1.Open;
cs2.Open;
cs3.Open;
cs4.Open;
cs5.Open;
cs6.Open;
end;

procedure TForm1.ssClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
if Socket.ReceiveLength>0 then Memo1.Lines.Add(Socket.ReceiveText);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
Stream : TWinSocketStream;
Buffer : array[0 .. 100] of Char;
begin
Stream := TWinSocketStream.Create(cs1.Socket, 60000);
try
FillChar(Buffer, length(Buffer), #0);
Buffer := "11111";
Stream.Write(Buffer, StrLen(@Buffer));
finally
Stream.Free;
end;
end;


 
Digitman ©   (2003-01-24 10:57) [3]

Это нормально. По-умолчанию для тек.реализации WinSock-сервис-провайдера очередь вх.запросов к серверному "слушающему" гнезду на акцепт не превышает SOMAXCONN = 5.
6-й запрос (в составе твоих 6-ти почти одновременных необработанных запросов на соединение) будет отвержен из-за превышения размера backlog-очереди.

См. описание WinSock-ф-ции listen()


 
Digitman ©   (2003-01-24 12:12) [4]

WSAECONNREFUSED = 10061

Даже имя константы кода ошибки об этом говорит :
"Winsock application error : connection REFUSED")

Читай документацию на WinSock)



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

Текущий архив: 2003.03.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
1-39331
Артём
2003-03-01 01:00
2003.03.13
DLL


3-39229
{{{KOTOS}}}
2003-02-21 20:14
2003.03.13
МАСТЕРА Какая БД сохранятет базу данных в одном файле?


6-39432
Gerda
2003-01-21 17:46
2003.03.13
Как с помощью TClient(Server)Socket переслать файл ??


1-39327
Сергей
2003-03-01 00:10
2003.03.13
Обновление окна


14-39575
SergeN
2003-02-25 10:32
2003.03.13
Шеф на больничном. Делать нечего.