![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() В общем, не работает программа на сокетах помогите пожалуйста найти ошибку.
Вкратце опишу собственно саму проблему: Пользователь №1 - в своей программе вводит адрес и порт для подключения к пользователю №2. Пользователь №2 - к нему осуществляется подключение первого пользователя, а он в свою очередь подключается автоматически к первому пользователю. Создается что то вроде 2х каналов связи для передачи сообщений в одностороннем порядке(один-в одну сторону, другой-в другую). Так вот подключение создается успешно, но сообщения от пользователя №1 к №2 не передаются, а сообщение от 2 к 1 нормально. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ScktComp; type TForm1 = class(TForm) srvrsckt1: TServerSocket; clntsckt1: TClientSocket; btn1: TButton; btn2: TButton; edt1: TEdit; edt2: TEdit; edt3: TEdit; lst1: TListBox; Button1: TButton; Button2: TButton; Label1: TLabel; lbl1: TLabel; lbl2: TLabel; procedure btn1Click(Sender: TObject); procedure clntsckt1Connect(Sender: TObject; Socket: TCustomWinSocket); procedure clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket); procedure btn2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure srvrsckt1ClientWrite(Sender: TObject; Socket: TCustomWinSocket); procedure clntsckt1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure srvrsckt1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a:string; implementation uses Unit2; {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin {Если соединение уже установлено - прерываем его.} if clntsckt1.Active then begin clntsckt1.Close; Exit; {...и выходим из обработчика} end; {Присваиваем свойствам Host и Port нужные значения} clntsckt1.Host := Edt1.Text; clntsckt1.Port := StrToInt(Edt2.Text); {Пытаемся открыть сокет и установить соединение} clntsckt1.Open; end; procedure TForm1.clntsckt1Connect(Sender: TObject; Socket: TCustomWinSocket); var b:string; begin b:=clntsckt1.Socket.RemoteAddress; {Как только произошло соединение - посылаем приветствие} Socket.SendText('HELLo'); Lst1.Items.Add('<Вы подключились к: ' +b); end; procedure TForm1.clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket); begin {Если пришло сообщение - добавляем его в ListBox} Lst1.Items.Add('> ' + Socket.ReceiveText); end; procedure TForm1.btn2Click(Sender: TObject); begin {Нажата кнопка - посылаем текст из третьего TEdit} clntsckt1.Socket.SendText(Edt3.Text); Lst1.Items.Add('< ' + Edt3.Text); edt3.Clear; end; procedure TForm1.Button1Click(Sender: TObject); begin srvrsckt1.Active:=true; if srvrsckt1.Active=true then label1.Color:=clGreen; if srvrsckt1.Active=true then label1.Caption:='ONLINE'; end; procedure TForm1.Button2Click(Sender: TObject); begin srvrsckt1.Active:=false; if srvrsckt1.Active=false then label1.Color:=clRed; if srvrsckt1.Active=false then label1.Caption:='OFFLINE'; end; procedure TForm1.srvrsckt1ClientWrite(Sender: TObject; Socket: TCustomWinSocket); begin Lst1.Items.Add('> ' + Socket.ReceiveText); end; procedure TForm1.clntsckt1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin if srvrsckt1.Active=False then Form2.ShowModal; end; procedure TForm1.srvrsckt1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); var a:string; begin a:=srvrsckt1.Socket.Connections[0].RemoteAddress; if clntsckt1.Active then begin clntsckt1.Close; Exit; {...и выходим из обработчика} end; {Присваиваем свойствам Host и Port нужные значения} clntsckt1.Host :=a; clntsckt1.Port :=1025; {Пытаемся открыть сокет и установить соединение} clntsckt1.Open; end; end. ps: вот исходник http://depositfiles.com/files/428lmy64x обратите внимание на эвенты для компонентов батон, и сокеты. |
#2
|
|||
|
|||
![]() Помогите пожалуйста!
|