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

帮小弟我看看代码,关于TCP/IP的

2012-09-08 
帮我看看代码,关于TCP/IP的下面的代码客户端为什么接收不到数据包?unit Unit1interfaceusesWindows, Mess

帮我看看代码,关于TCP/IP的


下面的代码客户端为什么接收不到数据包?


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, Menus, Sockets;

type
  TForm1 = class(TForm)
  TcpClient1: TTcpClient;
  TcpServer1: TTcpServer;
  StatusBar1: TStatusBar;
  Timer1: TTimer;
  Panel1: TPanel;
  Label2: TLabel;
  Edit1: TEdit;
  Label1: TLabel;
  Edit2: TEdit;
  Label3: TLabel;
  Edit3: TEdit;
  Label4: TLabel;
  Edit4: TEdit;
  connect: TButton;
  break: TButton;
  Panel5: TPanel;
  Panel2: TPanel;
  Memo1: TMemo;
  Panel3: TPanel;
  Memo2: TMemo;
  Panel6: TPanel;
  Button1: TButton;
  procedure connectClick(Sender: TObject);
  procedure FormCreate(Sender: TObject);
  procedure TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
  procedure breakClick(Sender: TObject);
  procedure Timer1Timer(Sender: TObject);
  procedure FormShow(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
  dddd:string;
  {Thread1:TMyFirstThread; }
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form1: TForm1;

implementation
 
{$R *.dfm}
//清理内存
procedure ClearMemory;
begin
  if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
  SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
  Application.ProcessMessages;
  end;
end;

procedure TForm1.connectClick(Sender: TObject);
begin
  form1.TcpServer1.Active:=false;
  //本地IP参数
  form1.TcpServer1.LocalHost:='192.168.1.11';
  form1.TcpServer1.LocalPort:='1000';
  form1.TcpServer1.Active:=true;
  form1.statusbar1.Panels[1].Text:= '已连接';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  memo1.text:='';
  memo2.text:='';
end;

procedure TForm1.TcpServer1Accept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var s:string;
begin
  s:=clientsocket.Receiveln;
  memo1.Lines.Add(clientSocket.RemoteHost);
  memo1.Lines.Add(s);

  //远程IP参数
  form1.TcpClient1.RemoteHost:=clientSocket.RemoteHost;
  form1.TcpClient1.RemotePort:=clientSocket.RemotePort;
  form1.tcpclient1.Connect;
  if form1.tcpclient1.Connected then
  begin
  form1.tcpclient1.Sendln(datetimetostr(now));
  end;
  form1.memo2.Lines.Add(datetimetostr(now));
  form1.tcpclient1.Disconnect;
end;

procedure TForm1.breakClick(Sender: TObject);
begin
if messagedlg('是否真的要断开连接?',mtinformation,[mbyes,mbNo,mbcancel],0)=mryes then
  begin
  tcpclient1.Active:=false;
  tcpserver1.Active:=false;
  statusbar1.Panels[1].Text:= '已断开';
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var aa:tdatetime;
  Hour,Min,Sec:String;
  S:String;
begin
  aa:=now;
  statusbar1.Panels[0].Text:=' 当前时间:'+datetimetostr(aa);
  //清理内存
  S:=timetostr(aa);
  Hour:=Copy(S, 1, 2);
  Min:=Copy(s, 4, 2);
  Sec:=Copy(S, 7, 2);
  if (Min='30') and (Sec='00') then


  begin
  Memo1.Lines.Clear;
  Memo2.Lines.Clear;
  ClearMemory;
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  dddd:='';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //远程IP参数
  form1.TcpClient1.RemoteHost:='192.168.1.10';
  form1.TcpClient1.RemotePort:='1000';
  form1.tcpclient1.Connect;
  if form1.tcpclient1.Connected then
  begin
  form1.tcpclient1.Sendln(datetimetostr(now));
  end;
  form1.memo2.Lines.Add(datetimetostr(now));
  form1.tcpclient1.Disconnect;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  tcpclient1.Active:=false;
  tcpserver1.Active:=false;
end;

end.

[解决办法]
你应该在服务器端的那个Accpet事件中对当前连接的客户端来写,貌似你里面还用了indy的idtcpcleint
[解决办法]
另外,想给client端发数据,用TcpServer1Accept事件的ClientSocket参数
而不是用form1.TcpClient1,因为Server/Client基本是在不同的exe上的,没机会在一個form上
当然测试你可以这么写

热点排行