首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

为什么小弟我的IdTCPClient和IdTCPServer总是连接不下?

2012-12-16 
为什么我的IdTCPClient和IdTCPServer总是连接不上??想做一个DELPHI的聊天程序,但是总是不成功,希望能得到

为什么我的IdTCPClient和IdTCPServer总是连接不上??
想做一个DELPHI的聊天程序,但是总是不成功,希望能得到解答,谢谢!!

unit Unit1;

interface

uses
  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分别用来接收和发送信息。

[最优解释]
IdTCPClient1.Host
IdTCPClient1.Port

IdTCPServer1.DefaultPort

只须设置这3个属性,就可以连接了
Port与DefaultPort要对应,Host就是IdTCPServer1所在计算机的IP

当然如果双方网络不相通,IP不正确或者使用的端口被防火墙关了,那肯定是不行了


[其他解释]
不能在connect事件里 athread.Connection.ReadLn;
[其他解释]
只需要开一个端口就行,然后另外个连接。
[其他解释]
提示什么错误?


[其他解释]
该回复于2012-10-04 13:41:44被版主删除
[其他解释]
连不上,找自己网络设置问题
[其他解释]

引用:
连不上,找自己网络设置问题


是指我的程序有问题,还是指电脑的问题??
[其他解释]
该回复于2012-10-04 19:37:06被版主删除
[其他解释]
引用:
不能在connect事件里 athread.Connection.ReadLn;


谢谢!!!那是在Execute事件里写吗??但是这好像在connect的时候就出错啊......
[其他解释]
引用:
提示什么错误?


socket error # 10061 connection refused

当然啦,我是在本地运行两个实例进行测试的,分别用了8000和8001端口。
[其他解释]

引用:
只需要开一个端口就行,然后另外个连接。

您好,请问您说的另外个连接是什么意思?
[其他解释]
server开端口,client连接。
[其他解释]
服务器在一个知名端口上listen,客户端连接服务器的这个端口. 收到错误connection refused
,就是你连接的端口不对,收到了服务器的RESET消息.这里有些winsock的源码,可以参考下:http://download.csdn.net/detail/geoff08zhang/4571358

热点排行