|
Вопрос # 535/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Я пишу программу для общения в сети.
У меня 2 вопроса по моей программе.
1. Когда я отправляю написанный текст на другой компьютер в сети, то этот текст доходит до адресата. Когда 2-й раз отправляю текст на этот же компьютер или уже другой, то у меня выскакивает ошибка. Описание данной ошибки: Project mess.exe raised exception class EidClosedSocket with message 'Disconnected'. Process stoped. Use step or run to continue. Как избавиться от этой ошибки?
2. Подскажите как передать имя компьютера, на другой компьютер при передаче сообщения. За ранее буду благодарен.
Приложение: Переключить в обычный режим- unit mes;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- IdIrcServer,IdIRC, Sockets, WinSock, IdTCPClient, IdTCPServer, StdCtrls,
- IdBaseComponent, IdComponent, IdTCPConnection;
- type
- TForm1 = class(TForm)
- Edit1: TEdit;
- Edit2: TEdit;
- Button1: TButton;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- ComboBox1: TComboBox;
- Memo1: TMemo;
- IdIRC1: TIdIRC;
- IdIRCServer1: TIdIRCServer;
- procedure FormCreate(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure ComboBox1Click(Sender: TObject);
- procedure IdIRCServer1CommandAway(Thread: TIdPeerThread; Parm: String);
- procedure Edit1KeyPress(Sender: TObject; var Key: Char);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form1: TForm1;
- wVerReq: WORD;
- wsaData: TWSAData;
- i: pchar;
- h: PHostEnt;
- c: array[0..128] of char;
- a: string;
- q: integer;
- mem:string;
- implementation
-
- {$R *.dfm}
-
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- wVerReq := MAKEWORD(1, 1);
- WSAStartup(wVerReq, wsaData);
-
//Ïîëó÷åíèå
õîñò
êîìïà
- GetHostName(@c, 128);
- h := GetHostByName(@c);
- a := h^.h_Name;
- i := iNet_ntoa(PInAddr(h^.h_addr_list^)^);
- Edit2.Text:=i;
- WSACleanup;
- Form1.ComboBox1.Text:=Form1.ComboBox1.Items[0];
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- Form1.IdIRC1.Connect;
- mem:=Edit1.Text;
- Memo1.Lines.Add(''+Edit1.Text);
- Form1.IdIRC1.SetAwayMessage(Edit1.Text);
- Form1.IdIRC1.Disconnect;
- Edit1.Clear;
- end;
-
- procedure TForm1.ComboBox1Click(Sender: TObject);
- begin
- Form1.IdIRC1.Host:=Form1.ComboBox1.Text;
- end;
-
- procedure TForm1.IdIRCServer1CommandAway(Thread: TIdPeerThread;
- Parm: String);
- begin
- Memo1.Lines.Add('Ïîëó÷åíî
ñîîáùåíèå:'
+Parm);
- Memo1.Font.Color:=clblue;
- end;
-
- procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
- begin
- if Key=#13 then
- Form1.Button1.Click;
- end;
-
- end.
 |
Вопрос задал: Курцетов И.А. (статус: Посетитель)
Вопрос отправлен: 27 апреля 2007, 08:18
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Denisss
Судя по описанию Indy, Вам следует проверять на подключенность к серверу IRC, прежде чем делать какие-либо действия (см. приложение).
PS
Приложение, конечно, не оч., но показывает принцип действия.
PPS
Как вариант, все это можно заменить на try .. except, но лучше все же проверять наличие соединения.
Еще как один вариант, можно вставить код
mem:=Edit1.Text;
Memo1.Lines.Add(''+Edit1.Text);
Form1.IdIRC1.SetAwayMessage(Edit1.Text);
Form1.IdIRC1.Disconnect;
Edit1.Clear;
в событие OnConnect, тогда проверок на соединение делать не обязательно.
Приложение: Переключить в обычный режим- procedure TForm1.Button1Click(Sender: TObject);
- begin
- with Form1.IdIRC1 do
- begin
-
-
- if not Connected then
- Connect;
- mem:= Edit1.Text;
- Memo1.Lines.Add(mem);
-
-
-
- if Connected then
- begin
- SetAwayMessage(mem);
- Disconnect;
- Edit1.Clear;
- end // if
-
-
- else
-
-
-
-
-
- end; // with
- end;
 |
Ответ отправил: Denisss (статус: 2-ой класс)
Время отправки: 27 апреля 2007, 15:24
Оценка за ответ: 4
Комментарий к оценке: Спасибо, заработало только в событии OnConnect, а по написанному вами коду, почему то не хочет совершать соединение.
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|