想做一个DELPHI的聊天程序,但是总是不成功,希望能得到解答,谢谢!!unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdTCPServer, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient;type
TForm1 = class(TForm)
Button1: TButton;
IdTCPClient1: TIdTCPClient;
IdTCPServer1: TIdTCPServer;
Edit1: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure IdTCPServerConnect(AThread: TIdPeerThread);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i:longint;
code,p:integer;
begin
idtcpclient1.Host:=trim(edit1.Text);
val(edit3.text,p,code);
idtcpclient1.Port:=p; with idtcpclient1 do
begin
if idtcpclient1.Connected=false then
idtcpclient1.Connect;
for i:=0 to memo1.lines.count-1 do
idtcpclient1.WriteLn(memo1.Lines[i]);
idtcpclient1.Disconnect;
end;
memo1.clear;end;procedure TForm1.IdTCPServerConnect(AThread: TIdPeerThread);
var
text:string;
begin
text:=athread.Connection.ReadLn; if trim(text)<>'' then
begin
memo2.Lines.Add(text);
text:=athread.Connection.ReadLn;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
p,code:integer;
begin
idtcpserver1.Active:=true;
val(edit2.Text,p,code);
idtcpserver1.DefaultPort:=p; idtcpclient1.Host:=trim(edit1.Text);
val(edit3.text,p,code);
idtcpclient1.Port:=p;
end;end.Button2是用来激活IDTCP的设置的,Button1用来发送字符串,memo1和memo2分别用来接收和发送信息。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdTCPServer, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient;type
TForm1 = class(TForm)
Button1: TButton;
IdTCPClient1: TIdTCPClient;
IdTCPServer1: TIdTCPServer;
Edit1: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure IdTCPServerConnect(AThread: TIdPeerThread);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
i:longint;
code,p:integer;
begin
idtcpclient1.Host:=trim(edit1.Text);
val(edit3.text,p,code);
idtcpclient1.Port:=p; with idtcpclient1 do
begin
if idtcpclient1.Connected=false then
idtcpclient1.Connect;
for i:=0 to memo1.lines.count-1 do
idtcpclient1.WriteLn(memo1.Lines[i]);
idtcpclient1.Disconnect;
end;
memo1.clear;end;procedure TForm1.IdTCPServerConnect(AThread: TIdPeerThread);
var
text:string;
begin
text:=athread.Connection.ReadLn; if trim(text)<>'' then
begin
memo2.Lines.Add(text);
text:=athread.Connection.ReadLn;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
p,code:integer;
begin
idtcpserver1.Active:=true;
val(edit2.Text,p,code);
idtcpserver1.DefaultPort:=p; idtcpclient1.Host:=trim(edit1.Text);
val(edit3.text,p,code);
idtcpclient1.Port:=p;
end;end.Button2是用来激活IDTCP的设置的,Button1用来发送字符串,memo1和memo2分别用来接收和发送信息。
谢谢!!!那是在Execute事件里写吗??但是这好像在connect的时候就出错啊......
socket error # 10061 connection refused当然啦,我是在本地运行两个实例进行测试的,分别用了8000和8001端口。
,就是你连接的端口不对,收到了服务器的RESET消息.这里有些winsock的源码,可以参考下:http://download.csdn.net/detail/geoff08zhang/4571358
IdTCPClient1.PortIdTCPServer1.DefaultPort只须设置这3个属性,就可以连接了
Port与DefaultPort要对应,Host就是IdTCPServer1所在计算机的IP当然如果双方网络不相通,IP不正确或者使用的端口被防火墙关了,那肯定是不行了