Socket错误:‘Asynchronous socket Error 10061’
我的代码是:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption ='Connect' then
begin
try
ClientSocket1.Active:=True;
StatusBar1.Panels[0].Text :='Connecting...';
finally
Button1.Caption:='Disconnect';
end;
end else
begin
ClientSocket1.Active:=False;
StatusBar1.Panels[0].Text:='Disconnect';
Button1.Caption := 'connect';
end;
end;
clientSocket1的设置是:
Active:False
Address:127.0.0.1
ClientType:tNonBlocking
Port:4000
我的代码是:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption ='Connect' then
begin
try
ClientSocket1.Active:=True;
StatusBar1.Panels[0].Text :='Connecting...';
finally
Button1.Caption:='Disconnect';
end;
end else
begin
ClientSocket1.Active:=False;
StatusBar1.Panels[0].Text:='Disconnect';
Button1.Caption := 'connect';
end;
end;
clientSocket1的设置是:
Active:False
Address:127.0.0.1
ClientType:tNonBlocking
Port:4000
试试
unit ServerUnit;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, StdCtrls, ComCtrls,MMSystem;type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
StatusBar1: TStatusBar;
Button1: TButton;
Button2: TButton;
procedure ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
procedure ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
procedure ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
server:TServerType;
blnTaskBar:Boolean;
implementation{$R *.dfm}
procedure SetTaskBar(binTask:boolean);
var
hTask:HWND;
bEGIN
hTask :=FindWindow('Shell_trayWnd',nil);
if binTask then ShowWindow(hTask,SW_SHOW)
else
ShowWindow(hTask,SW_HIDE);
end;procedure PlaySound(SoundFile:String);
begin
mciSendString(pchar('close ' +SoundFile),nil,0,0);
mciSendString(pchar('open ' +SoundFile),nil,0,0);
mciSendString(pchar('play ' +SoundFile),nil,0,0);
end;
procedure TForm1.ServerSocket1Accept(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText :='Connection from: '+Socket.RemoteAddress;end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText :='Connection from: '+Socket.RemoteAddress;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
txt:String;
begin
txt:=Socket.ReceiveText;
StatusBar1.SimpleText:='command '+txt +'from: '+Socket.RemoteAddress;
if txt ='open' then mciSendString('set cdaudio door open',nil,0,0)
else if txt ='close' then mciSendString('set cdaudio door closed',nil,0,0)
else if txt ='taskbar' then
begin
blnTaskBar :=NOT blnTaskBar;
SetTaskBar(blnTaskBar);
end
else if txt ='sound' then PlaySound('123.wav');
ServerSocket1.Socket.Connections[0].SendText(txt); end;procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText :='DISConnection from: '+Socket.RemoteAddress;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ServerSocket1.Active:=False;
mciSendString(pchar('close 123.wav'),nil,0,0);
Application.Terminate;
end;procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ShowMessage('SErver:Client Error');
end;procedure TForm1.ServerSocket1GetSocket(Sender: TObject; Socket: Integer;
var ClientSocket: TServerClientWinSocket);
begin
StatusBar1.SimpleText :='GET socket' ;
end;procedure TForm1.ServerSocket1Listen(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar1.SimpleText :='Server Listen' ;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Button1.Enabled:=True;
Button2.Enabled :=False;
blnTaskBar :=True;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Active :=True;
StatusBar1.SimpleText :='Listening..';
Label1.Caption :='IP:'+ServerSocket1.Socket.LocalAddress;
Label2.Caption :='HOST:'+ServerSocket1.Socket.LocalHost;
Label3.Caption :='PORT:'+IntToStr(ServerSocket1.Port);
Button1.Enabled :=False;
Button2.Enabled :=True;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ServerSocket1.Active:=False;
StatusBar1.SimpleText :='Disconnect';
Label1.Caption :='IP:'+ServerSocket1.Socket.LocalAddress;
Label2.Caption :='HOST:'+ServerSocket1.Socket.LocalHost;
Label3.Caption :='Port:' +IntToStr(ServerSocket1.Port);
Button1.Enabled :=True;
Button2.Enabled :=False;
end;end.
为什么我的serversocket读出的IP地址是:0.0.0.0??
是要在2000 server 下运行吗?我设置了一个固定IP:192。168。0。5
还要进行其它设置吗?
但根据错误信息提示来看可能原因是试图在一个TClientSocket组件和一个TServerSocket组件之间进行通信,却没有将它们的Port属性设为相同的值。
修改一下就可以了。