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

Вниз

Работа с TTcpServer и TTcpClient   Найти похожие ветки 

 
hellmachine   (2003-11-18 02:54) [0]

Доброе время суток! Есть программа-чат для локальной сети, скорее всего написанная на Д6; работает в режиме "с выделенным сервером" по протоколу TCP/IP, в моем распоряжении только клиентская часть - порт и адрес удаленной машины известны; нужно встроить в цепь клиент-сервер свое звено, перенаправляющее все сообщения и сохраняющее их; Я использовал компоненты TTcpServer и TTcpClient: на клинетской части приложения исправляется адрес удаленной машины на адрес моего компьютера, у TcpServer выставлятся известный локальный порт и локальный ардес хоста - IP адрес моей машины, у TcpClient выставляется известный удаленный порт и адрес удаленной машины с серверной частью чата; Ниже привожу исходный код программы:

procedure OnTCPServerClientSend(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
procedure OnTCPServerClientReceive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
procedure OnTCPServerClientDisconnect(Sender: TObject);
{...}
FTCPServerClient: TCustomIpClient;
{...}
procedure TFrmMain.BtnStartClick(Sender: TObject);
begin
if TCPServer.Listening then
TCPServer.Close();
try
TCPServer.LocalPort := EdtPort.Text;
TCPServer.LocalHost := EdtLocalHost.Text;
TCPServer.Open();
except
end;
end;

procedure TFrmMain.TCPServerAccept(Sender: TObject; ClientSocket: TCustomIpClient);
begin
MemoLog.Lines.Add("IN_" + ClientSocket.RemoteHost + "_CONNECTED");
ClientSocket.OnSend := OnTCPServerClientSend;
ClientSocket.OnReceive := OnTCPServerClientReceive;
ClientSocket.OnDisconnect := OnTCPServerClientDisconnect;
FTCPServerClient := ClientSocket;
if TCPClient.Active then
TCPClient.Close();
TCPClient.RemoteHost := EdtRemoteHost.Text;
TCPClient.RemotePort := EdtPort.Text;
TCPClient.Open();
end;

procedure TFrmMain.OnTCPServerClientSend(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
var s: string;
begin
s := Copy(Buf, 0, DataLen);
MemoLog.Lines.Add("IN_SEND>" + s);
end;

procedure TFrmMain.OnTCPServerClientReceive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
var s: string;
begin
s := Copy(Buf, 0, DataLen);
MemoLog.Lines.Add("IN_RECEIVE>" + s);
if TCPClient.Active then
TCPClient.SendBuf(Buf, DataLen);
end;

procedure TFrmMain.OnTCPServerClientDisconnect(Sender: TObject);
begin
MemoLog.Lines.Add("IN_" + TCustomIpClient(Sender).RemoteHost + "_DISCONNECTED");
TCPClient.Close();
end;

procedure TFrmMain.TCPClientConnect(Sender: TObject);
begin
MemoLog.Lines.Add("OUT_" + TCPClient.RemoteHost + "_CONNECTED");
end;

procedure TFrmMain.TCPClientDisconnect(Sender: TObject);
begin
MemoLog.Lines.Add("OUT_" + TCPClient.RemoteHost + "_DISCONNECTED");
end;

procedure TFrmMain.TCPClientReceive(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
var s: string;
begin
s := Copy(Buf, 0, DataLen);
MemoLog.Lines.Add("OUT_RECEIVE>" + s);
if FTCPServerClient <> nil then
FTCPServerClient.SendBuf(Buf, DataLen);
end;

procedure TFrmMain.TCPClientSend(Sender: TObject; Buf: PAnsiChar; var DataLen: Integer);
var s: string;
begin
s := Copy(Buf, 0, DataLen);
MemoLog.Lines.Add("OUT_SEND>" + s);
end;

Полученные результаты не удовлетворили, поэтому и обращаюсь за помощью: если у TcpServer и TcpClient BlockMode установлен в bmBlocking и bmThreadBlocking соответсвенно - клиентская часть соединяется с программой, моя программа соединяется с сервером и тут же клиентская часть почему-то отсоединяется; при остальных комбинациях соединение не устанавливается;
Можно ли решить эту задачу подбным методом и если да, то где у меня ошибка?


 
dimmu   (2003-11-18 11:16) [1]

FTCPServerClient.Open() в TFrmMain.TCPServerAccept



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

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

Наверх





Память: 0.46 MB
Время: 0.01 c
14-63391
Undert
2003-12-28 17:07
2004.01.20
Max Payne 1


14-63295
blackman
2003-12-30 22:00
2004.01.20
Михаил ЖВАНЕЦКИЙ. Новогоднее обращение к советскому народу


7-63419
Inq
2003-11-04 22:36
2004.01.20
Работа с Windows


1-63148
Sirakuz
2004-01-07 02:28
2004.01.20
Обращение к private переменным класса из ассемблерной вставки


7-63412
Sam Stone
2003-10-24 11:12
2004.01.20
Входящий трафик





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