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

Вниз

Tserversocket не принимает коннект и сообщения   Найти похожие ветки 

 
OFP   (2006-01-31 22:14) [0]

Доброго всем дня....

Делаю простую программу клиент - сервер для своих целей ...

И у меня возникли ряд вопросов и проблем.
По порядку:

1. На сервере.

Разместил serv : TServerSocket
- установил ему порт 45500
- serv.active:=true; ( запустил сервер )

Теперь когда, я соединяюсь с клиента, то у меня срабатывае на сервере следующие обработчики событий по порядку:

GetSocket --> Accept ---> GetThread ---> ThreadStart и все ...

Обработчик события - ClientConnect у меня не срабатывает...

соотвественно сервер, не видит когда клиент отсоединяется ...

если я с клиента посылаю любое текствое сообщение короткое, то сервер просто виснет....
если я с сервера, пытаюсь отправить сообщение к клиенту, который вроде соединился то он пишет, что все удачно, но ни чего не происходит.... вот ....

вот код сервера....

{РАБОТАЕТ}
procedure TFormMain.FormShow(Sender: TObject);
begin
ServerSocket.Port:=50;
ServerSocket.Active:=true;
ServerSocket.Open;
end;

{РАБОТАЕТ}
procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ServerSocket.Active then Server.Free;
end;

{РАБОТАЕТ}
procedure TFormMain.ServerSocketAccept(Sender: TObject;
Socket: TCustomWinSocket);
begin

MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Клиент принят: "+Socket.RemoteAddress+
" handle: "+IntToStr(ServerSocket.Socket.SocketHandle));

end;

{ ТУТ НЕ РАБОТАЕТ }
procedure TFormMain.ServerSocketClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" -Клиент присоединился ("+Socket.RemoteAddress+")");

end;

{ ТУТ НЕ РАБОТАЕТ }
procedure TFormMain.ServerSocketClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Клиент отсоединился ("+Socket.RemoteAddress+")");

end;

{??????}
procedure TFormMain.ServerSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Ошибка ("+Socket.RemoteAddress+")"+" - code error:"+IntToStr(ErrorCode));
end;

{ ТУТ НЕ РАБОТАЕТ }
procedure TFormMain.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
MessageText : string;
begin
MessageText := Socket.ReceiveText;
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Сообщение от клиента- ("+
Socket.RemoteAddress+"): "+ MessageText);
end;

{ отправка сообщение клиентам - НЕ РАБОТАЕТ }
procedure TFormMain.ButtonSendMessageClick(Sender: TObject);
var
i: Integer;
begin
if ServerSocket.Socket.ActiveConnections = 0 then
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Нет соединений.");

for i := 0 to ServerSocket.Socket.ActiveConnections-1 do
begin
ServerSocket.Socket.Connections[i].SendText(EditTextMessage.Text);
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Êëèåíòó "+ServerSocket.Socket.Connections[i].RemoteAddress+" ñîîáùåíèå ïîñëàííî.");
end;
end;

{РАБОТАЕТ}
procedure TFormMain.ServerSocketGetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
begin

MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Получить сокет, IDSocket: "+IntToStr(Socket));
end;

{РАБОТАЕТ}
procedure TFormMain.ServerSocketGetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Получить поток.");
end;

{РАБОТАЕТ}
procedure TFormMain.ServerSocketThreadEnd(Sender: TObject;
Thread: TServerClientThread);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Закрыть поток.");
end;

{РАБОТАЕТ}
procedure TFormMain.ServerSocketThreadStart(Sender: TObject;
Thread: TServerClientThread);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Запустить поток.");
end;

{РАБОТАЕТ}
procedure TFormMain.ServerSocketListen(Sender: TObject;
Socket: TCustomWinSocket);
begin
MemoStatusServer.Lines.Add(TimeToStr(Now)+" - Слушаем потрт: "+IntToStr(ServerSocket.Port));
end;

Подскажите, где что надо исправить или дописать чтоб сервер, начал нормально работать....

Заранее большое спасибо !


 
OFP   (2006-02-01 01:06) [1]

прикол... ни когда бы не подумал..., но проблема решилась,
в что в ServerType (сервера и клиента) нужно поставить - stNonBlocking
и сразу нормальный конект


 
Digitman ©   (2006-02-01 08:34) [2]


> нужно поставить - stNonBlocking
> и сразу нормальный конект


Он, коннект, и в случае stThreadBlocking тоже "нормальный".
Но при stThreadBlocking обработчики транспортных событий сервера вызываются в контекстах доп.потоков, а обращение к потоконебезопасным VCL-контролам (в дан.случае - MemoStatusServer) в доп.потоках недопустимо.

Замени обращение к MemoStatusServer на потокобезопасную ф-цию MessageBox() и убедись в том что все транспортные события возбуждаются сервером в должном порядке.



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

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

Наверх





Память: 0.46 MB
Время: 0.012 c
15-1146643657
annonymous
2006-05-03 12:07
2006.05.28
Как эмигрировать?


2-1147242403
Id
2006-05-10 10:26
2006.05.28
Регистарция входа в базу данных на FB


2-1147211330
Аска
2006-05-10 01:48
2006.05.28
Многомерные массивы могут быть только статичными?


15-1146827391
Slava812
2006-05-05 15:09
2006.05.28
Для любителей С


2-1147343353
legran
2006-05-11 14:29
2006.05.28
Перехват сообщений чужому окну D2005





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский