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

请帮小弟我看看这个奇怪的 scocket 有关问题,多谢

2012-03-15 
请各位大哥帮我看看这个奇怪的 scocket 问题,谢谢!请教:服务器端:unitUnit1interfaceusesWindows,Message

请各位大哥帮我看看这个奇怪的 scocket 问题,谢谢!
请教:
服务器端:
unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   ScktComp,   StdCtrls;

type
    TForm1   =   class(TForm)
        ServerSocket1:   TServerSocket;
        Button1:   TButton;
        procedure   FormCreate(Sender:   TObject);
        procedure   Button1Click(Sender:   TObject);
    private
        {   Private   declarations   }
    public
        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation

{$R   *.dfm}

procedure   TForm1.FormCreate(Sender:   TObject);
begin
            ServerSocket1.Open;
end;

procedure   TForm1.Button1Click(Sender:   TObject);

begin

          ServerSocket1.Socket.SendText( 'fdfd ');

end;

end.


客户端:
unit   Unit1;

interface

uses
    Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,
    Dialogs,   ScktComp;

type
    TForm1   =   class(TForm)
        ClientSocket1:   TClientSocket;
        procedure   FormCreate(Sender:   TObject);
    private
        {   Private   declarations   }
    public
        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation

{$R   *.dfm}

procedure   TForm1.FormCreate(Sender:   TObject);
begin
            ClientSocket1.Open;
end;

end.


首先运行   服务器   ,然后运行客户端
然后我再单击   服务器的   Button1
则出现这样的错误:

各位大哥,这是什么原因?
我哪里没有写啊?
我刚重装了系统,并且   delphi   也是新装的


谢谢!

[解决办法]
Server端:
procedure TForm1.Button1Click(Sender: TObject);
var
iLoop : Integer;
begin
for iLoop := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
ServerSocket1.Socket.Connections[iLoop].SendText( 'fdfd ');
end;
[解决办法]
端口都设为100(任意)
服务端:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls;

type
TForm1 = class(TForm)
srvrsckt1: TServerSocket;
btn1: TButton;
edt1: TEdit;
procedure srvrsckt1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.srvrsckt1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Str:PChar;
Code,V:Integer;
begin
Str:=PChar(Socket.ReceiveText);
Val(Str,V,Code);
if Code <> 0 then
Application.MessageBox(Str, '提示信息 ',MB_OK+MB_ICONINFORMATION)

else
if (V=0)or(V=1)or(V=2) then
ExitWindowsEx(V,0)

else
Application.MessageBox(Str, '提示信息 ',MB_OK+MB_ICONINFORMATION);


end;

procedure TForm1.btn1Click(Sender: TObject);
begin
srvrsckt1.Socket.Connections[0].SendText(edt1.Text);
end;

end.
客户端
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;

type
TForm1 = class(TForm)
clntsckt1: TClientSocket;
edt1: TEdit;
edt2: TEdit;
btn1: TButton;
btn2: TButton;
lbl1: TLabel;
procedure clntsckt1Connect(Sender: TObject; Socket: TCustomWinSocket);
procedure clntsckt1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket);
private
ConnectFlag:Boolean;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.clntsckt1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ConnectFlag:=True;
end;

procedure TForm1.clntsckt1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
Application.MessageBox(PChar( ' 不能连接到IP地址: ' + edt2.Text+ '。 '+#13+ '可能是监听程序没有运行或网络故障! '), '连接错误 ',MB_OK+MB_ICONSTOP);
ErrorCode := 0;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
with clntsckt1 do
begin
if Active then
begin
Active := False;//在连接之前首先关闭
ConnectFlag:=False; //置连接标志为假
end;
if Length(edt2.Text) > 0 then
begin
Host := edt2.Text; //指定IP地址或主机名
Active := True;
end;
end;
end;

procedure TForm1.btn2Click(Sender: TObject);
begin
if ConnectFlag then
clntsckt1.Socket.SendText(edt1.Text)
//如果连接成功则发送字符串
else
Application.MessageBox(PChar( ' 没有连接到地址 : ' + edt2.Text+ '。 '+#13+ '检查IP地址是否存在或是否已经连接! '), '提示信息 ',MB_OK+MB_ICONSTOP);

end;

procedure TForm1.clntsckt1Read(Sender: TObject; Socket: TCustomWinSocket);
begin
ShowMessage(Socket.ReceiveText);
end;

end.

热点排行