![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как заставить два TClientSocket отправлять одновременно текст!!! [D6, WinXP]
Новочеркасский Волк © (2006-03-13 21:49:00)Здравствуйте. Подскажите пожалуйсто вот мне надо чтоб по нажатию Buttion1 ClientSocket1 отправлял своему серверу текст (доустим) "ааа", а ClientSocket2 отправлял текст "ввв" своему серверу. Когда это осуществляеш вылетает ошибка, что типа нельзя отпра влять сразу два. Я пробовал, отгораживал их Буливской переменной, что сначала один, потом другой но нет всё рано не могут!!! Подскажите что делать. Срочно надо!!!
----------------------------------------------
Заранее очень благодарен!!!
Новочеркасский Волк (2006-03-14 18:59:00) [1]Да спасибо всем. Всё получилось!!!
Сергей М. (2006-03-14 16:28:00) [2]OnWrite() на то существует... для несведущих ..
И нечего изобретать велосипеды в связи с этим фактом.
А сей факт и есть факт разрешениязаписи очередной инф-ции, требуемой к передаче, в буфер передачи.
Dmitrij_K (2006-03-14 16:16:00) [3]
procedure TForm1.Button1Click(Sender: TObject);
begin
if ClientSocket1.Active then ClientSocket1.Socket.SendText('E1');
if ClientSocket2.Active then ClientSocket2.Socket.SendText('E2');
end;
Dmitrij_K (2006-03-14 16:10:00) [4]Когда ты отправляешь текст, еще не факт что клиент соединился с сервером
Сергей М. (2006-03-14 16:08:00) [5]
> чё где нитак
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
A:=Socket.ReceiveText;
Edit1.Text:=(A);
end;
Новочеркасский Волк (2006-03-14 15:52:00) [6]Вот код моей проги посмотрите что не так???
Клиент:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Bruud=true then
begin
ClientSocket1.Socket.SendText('E1');
Bruud:=False;
end;
If Bruud=False then
begin
ClientSocket2.Socket.SendText('E2');
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Bruud:=True;
end;
--------------------------------------------------------------
Сервер:
var
A, B: String;
Form1: TForm1;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
A:=ServerSocket1.Socket.ReceiveText();
Edit1.Text:=(A);
end;
procedure TForm1.ServerSocket2ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
B:=ServerSocket2.Socket.ReceiveText();
Edit2.Text:=(B);
end;
-----------------------------------------------------
Порты разные 2455 и 2466. Вроде должно работать ан нет!!! Подскажите чё где нитак???
---------------------------------------------------
Заранее благодарен!!!
seeker (2006-03-14 10:53:00) [7]Я не знаю что там не работает, но этот кодработает
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Button1: TButton;
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Button1.Enabled:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Socket.Connections[0].SendText('bbb');
ClientSocket1.Socket.SendText('aaa');
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage(Socket.ReceiveText);
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage(Socket.ReceiveText);
end;
end.
Или я что-то не так понял?
Kacnep (2006-03-14 06:33:00) [8]Не может такого быть. Правда сам именно так не пробовал. Скорее всего у тебя идет работа с одним портом...
В общем дай для начала такую инфу.
Дельф?
Блок или НеБлок?
И кусок кода твоей отправки.
Схема примерно должна быть следующая
(для НеБлок)
1. По нажатию
назначаешь IP_Server1:PORT1
назначаешь IP_Server2:PORT2
Socket1.Open
Socket2.Open
На событие ОнКоннектСокет_1 вешаешь отправку строки Тест1
Закрыть Сокет1
На событие ОнКоннектСокет_2 вешаешь отправку строки Тест2
Закрыть Сокет2
Ну и Еррор1 и Еррор2 выводи себе для инфы
В блокирующем режиме тоже самое но последовательно и лучше сразу рекомендую вывести в поток - круче. Или Заюзай Инди.