74 lines
1.8 KiB
ObjectPascal
74 lines
1.8 KiB
ObjectPascal
uses System, System.Net, System.Net.Sockets, System.Threading, crt;
|
|
|
|
type
|
|
TByteArray = array of byte;
|
|
|
|
var
|
|
client: TCPClient;
|
|
s_str: NetworkStream;
|
|
s_raw: TByteArray;
|
|
s_ip, cl_str, cl_stro, name: string;
|
|
s_port, length: integer;
|
|
thr_s, thr_r: Thread;
|
|
|
|
procedure send;
|
|
begin
|
|
while true do
|
|
begin
|
|
readln(cl_str);
|
|
s_str.Write(System.Text.Encoding.Default.GetBytes(cl_str), 0, cl_str.Length);
|
|
end;
|
|
end;
|
|
|
|
procedure read;
|
|
begin
|
|
while true do
|
|
begin
|
|
length := s_str.Read(s_raw, 0, s_raw.Length);
|
|
cl_stro := System.Text.Encoding.Default.GetString(s_raw, 0, length);
|
|
writeln(cl_stro);
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
s_raw := TByteArray(System.Array.CreateInstance(typeof(byte), 1024));
|
|
try
|
|
textcolor(14);
|
|
write('Введите IP: ');
|
|
readln(s_ip);
|
|
write('Введите порт: ');
|
|
readln(s_port);
|
|
except
|
|
textcolor(4);
|
|
writeln('Какая-то ошибка... Закрываем приложение.');
|
|
sleep(2500);
|
|
exit;
|
|
end;
|
|
textcolor(2);
|
|
try
|
|
client := TCPClient.Create;
|
|
client.Connect(ipAddress.Parse(s_ip), s_port);
|
|
if client.Connected = true then
|
|
begin
|
|
write('Введите имя: '); readln(name);
|
|
s_str := client.GetStream;
|
|
s_str.Write(System.Text.Encoding.Default.GetBytes(name), 0, name.Length);
|
|
writeln('Подключено к ', s_ip);
|
|
length := s_str.Read(s_raw, 0, s_raw.Length);
|
|
cl_str := System.Text.Encoding.Default.GetString(s_raw, 0, length);
|
|
writeln(cl_str);
|
|
thr_s := new Thread(send);
|
|
thr_s.Start;
|
|
thr_r := new Thread(read);
|
|
thr_r.Start;
|
|
end;
|
|
except
|
|
if client.Connected = false then
|
|
begin
|
|
textcolor(4);
|
|
writeln('Подключение не удалось. Выход...');
|
|
sleep(2500);
|
|
exit;
|
|
end;
|
|
end;
|
|
end. |