初学ClientSocket/ServerSocket编程,作了个小例子,请大侠看一下是那的错误!
服务器端:
Unit Unit1;InterfaceUses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;Type
TForm1 = Class(TForm)
CbProto: TComboBox;
Label1: TLabel;
Label2: TLabel;
EdtPort: TEdit;
ServerSocket1: TServerSocket;
Label3: TLabel;
EdtMsg: TEdit;
BtCon: TButton;
BtPost: TButton;
Procedure CbProtoClick(Sender: TObject);
Procedure BtPostClick(Sender: TObject);
Procedure BtConClick(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;Var
Form1: TForm1;Implementation{$R *.dfm}Procedure TForm1.CbProtoClick(Sender: TObject);
Begin
Case CbProto.ItemIndex Of //
0: EdtPort.Text := '80';
1: EdtPort.Text := '21';
2: EdtPort.Text := '';
End; // case
End;Procedure TForm1.BtPostClick(Sender: TObject);
Begin
ServerSocket1.Socket.SendText(EdtMsg.text);
End;Procedure TForm1.BtConClick(Sender: TObject);
Begin
ServerSocket1.Service := CbProto.Text;
Case CbProto.ItemIndex Of //
0: ServerSocket1.Port := 80;
1: ServerSocket1.Port := 21;
Else
ServerSocket1.Port := strtoint(EdtPort.Text);
End; // case
ServerSocket1.Active := true;
End;End.客户端:
Unit Unit1;InterfaceUses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;Type
TForm1 = Class(TForm)
Label1: TLabel;
Label2: TLabel;
ClientSocket1: TClientSocket;
Label3: TLabel;
CbProto: TComboBox;
EdtPort: TEdit;
EdtHostName: TEdit;
BtCreatCon: TButton;
Label4: TLabel;
Memo1: TMemo;
EdtAddress: TEdit;
Procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
Procedure BtCreatConClick(Sender: TObject);
Procedure CbProtoClick(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;Var
Form1: TForm1;Implementation{$R *.dfm}
function Get_ComputerName: String;
var
iSize: LongWord;
ComputerName: PChar;
begin
iSize := MAX_COMPUTERNAME_LENGTH + 1;
GetMem(ComputerName, iSize);
GetComputerName(ComputerName, iSize);
Result := ComputerName;
FreeMem(ComputerName);
end;
Procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
Begin
Memo1.Lines.add(Socket.ReceiveText);
End;Procedure TForm1.BtCreatConClick(Sender: TObject);
Begin
ClientSocket1.Service := CbProto.Text;
ClientSocket1.Host := Get_ComputerName;
If trim(EdtHostName.Text) = '' Then
ClientSocket1.Address := EdtAddress.Text;
Case CbProto.ItemIndex Of //
0: ClientSocket1.Port := 80;
1: ClientSocket1.Port := 21;
Else
ClientSocket1.Port := strtoint(EdtPort.Text);
End; // case
EdtHostName.Text:=Get_ComputerName;
ClientSocket1.Active := true;
End;Procedure TForm1.CbProtoClick(Sender: TObject);
Begin
Case CbProto.ItemIndex Of //
0: EdtPort.Text := '80';
1: EdtPort.Text := '21';
2: EdtPort.Text := '';
End; // case
End;End.
服务器端:
Unit Unit1;InterfaceUses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;Type
TForm1 = Class(TForm)
CbProto: TComboBox;
Label1: TLabel;
Label2: TLabel;
EdtPort: TEdit;
ServerSocket1: TServerSocket;
Label3: TLabel;
EdtMsg: TEdit;
BtCon: TButton;
BtPost: TButton;
Procedure CbProtoClick(Sender: TObject);
Procedure BtPostClick(Sender: TObject);
Procedure BtConClick(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;Var
Form1: TForm1;Implementation{$R *.dfm}Procedure TForm1.CbProtoClick(Sender: TObject);
Begin
Case CbProto.ItemIndex Of //
0: EdtPort.Text := '80';
1: EdtPort.Text := '21';
2: EdtPort.Text := '';
End; // case
End;Procedure TForm1.BtPostClick(Sender: TObject);
Begin
ServerSocket1.Socket.SendText(EdtMsg.text);
End;Procedure TForm1.BtConClick(Sender: TObject);
Begin
ServerSocket1.Service := CbProto.Text;
Case CbProto.ItemIndex Of //
0: ServerSocket1.Port := 80;
1: ServerSocket1.Port := 21;
Else
ServerSocket1.Port := strtoint(EdtPort.Text);
End; // case
ServerSocket1.Active := true;
End;End.客户端:
Unit Unit1;InterfaceUses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;Type
TForm1 = Class(TForm)
Label1: TLabel;
Label2: TLabel;
ClientSocket1: TClientSocket;
Label3: TLabel;
CbProto: TComboBox;
EdtPort: TEdit;
EdtHostName: TEdit;
BtCreatCon: TButton;
Label4: TLabel;
Memo1: TMemo;
EdtAddress: TEdit;
Procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
Procedure BtCreatConClick(Sender: TObject);
Procedure CbProtoClick(Sender: TObject);
Private
{ Private declarations }
Public
{ Public declarations }
End;Var
Form1: TForm1;Implementation{$R *.dfm}
function Get_ComputerName: String;
var
iSize: LongWord;
ComputerName: PChar;
begin
iSize := MAX_COMPUTERNAME_LENGTH + 1;
GetMem(ComputerName, iSize);
GetComputerName(ComputerName, iSize);
Result := ComputerName;
FreeMem(ComputerName);
end;
Procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
Begin
Memo1.Lines.add(Socket.ReceiveText);
End;Procedure TForm1.BtCreatConClick(Sender: TObject);
Begin
ClientSocket1.Service := CbProto.Text;
ClientSocket1.Host := Get_ComputerName;
If trim(EdtHostName.Text) = '' Then
ClientSocket1.Address := EdtAddress.Text;
Case CbProto.ItemIndex Of //
0: ClientSocket1.Port := 80;
1: ClientSocket1.Port := 21;
Else
ClientSocket1.Port := strtoint(EdtPort.Text);
End; // case
EdtHostName.Text:=Get_ComputerName;
ClientSocket1.Active := true;
End;Procedure TForm1.CbProtoClick(Sender: TObject);
Begin
Case CbProto.ItemIndex Of //
0: EdtPort.Text := '80';
1: EdtPort.Text := '21';
2: EdtPort.Text := '';
End; // case
End;End.
改为ServerSocket1.Socket.Connections[0].SendText(EdtMsg.text);