Asynchronous socket error 10060这是聊天室的程序
服务端
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ScktComp, StdCtrls;type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
ListBox1: TListBox;
ListBox2: TListBox;
ListBox3: TListBox;
ServerSocket1: TServerSocket;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ListBox2DblClick(Sender: TObject);
procedure RefreshClients;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
connect_count:integer=0;implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
begin
RefreshClients;
end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
listbox3.Items.Add('connect:'+socket.RemoteHost+'('+socket.RemoteAddress+')');
inc(connect_count);
RefreshClients;
end;procedure TForm1.RefreshClients;
var
l,j:integer;
begin
Listbox1.clear;
if connect_count<>0 then
for l:=0 to connect_count-1 do
with ServerSocket1.socket.connections[l] do
begin
sendtext('^get refresh');
sleep(50);
listbox1.Items.add(RemoteAddress+'('+RemoteHost+')');
for j:=0 to connect_count-1 do
begin
sendtext('$'+inttostr(j)+':'+serversocket1.socket.connections[j].RemoteAddress+'('+serversocket1.socket.connections[j].RemoteHost+')');
sleep(50);
end;
end;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
listbox3.Items.Add('disconnected:'+socket.RemoteHost+'('+socket.RemoteAddress+')');
dec( connect_count);
RefreshClients;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
l:integer;
rc_text:string;
rc_name:string;
begin
rc_text:=socket.ReceiveText;
rc_name:=socket.RemoteHost;
listbox2.Items.Add(rc_name+':'+rc_text);
for l:=0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[l].SendText(rc_name+':'+ rc_text) ;
end;procedure TForm1.ListBox2DblClick(Sender: TObject);
begin
showmessage(listbox1.Items[listbox1.Itemindex]);
end;procedure TForm1.FormCreate(Sender: TObject);
beginend;end.
客户端
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
CheckBox1: TCheckBox;
ClientSocket1: TClientSocket;
Button1: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
ListBox1: TListBox;
ListBox2: TListBox;
Edit2: TEdit;
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ListBox1DblClick(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if not clientsocket1.Active then
clientsocket1.Address:=edit1.Text;
if not checkbox1.Checked then
listbox2.Clear;
clientsocket1.Active:=checkbox1.Checked;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Socket.SendText(edit2.Text);
edit2.Text:='';
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
us_text:string;
begin
us_text:=Socket.ReceiveText;
if CompareStr('^Get refresh', us_text)=0 then
listbox2.Clear
else
begin
if pos('$', us_text)=1 then
listbox2.Items.Add( us_text)
else
listbox1.Items.Add( us_text);
end;
end;procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then
begin
clientsocket1.Socket.SendText(edit2.Text);
edit2.Text:='';
end;
end;procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
showmessage(listbox1.Items[listbox1.Itemindex]);
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
beginend;end.
服务端
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ScktComp, StdCtrls;type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
ListBox1: TListBox;
ListBox2: TListBox;
ListBox3: TListBox;
ServerSocket1: TServerSocket;
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
procedure ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure ListBox2DblClick(Sender: TObject);
procedure RefreshClients;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
connect_count:integer=0;implementation{$R *.dfm}procedure TForm1.Timer1Timer(Sender: TObject);
begin
RefreshClients;
end;procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
listbox3.Items.Add('connect:'+socket.RemoteHost+'('+socket.RemoteAddress+')');
inc(connect_count);
RefreshClients;
end;procedure TForm1.RefreshClients;
var
l,j:integer;
begin
Listbox1.clear;
if connect_count<>0 then
for l:=0 to connect_count-1 do
with ServerSocket1.socket.connections[l] do
begin
sendtext('^get refresh');
sleep(50);
listbox1.Items.add(RemoteAddress+'('+RemoteHost+')');
for j:=0 to connect_count-1 do
begin
sendtext('$'+inttostr(j)+':'+serversocket1.socket.connections[j].RemoteAddress+'('+serversocket1.socket.connections[j].RemoteHost+')');
sleep(50);
end;
end;
end;
procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
listbox3.Items.Add('disconnected:'+socket.RemoteHost+'('+socket.RemoteAddress+')');
dec( connect_count);
RefreshClients;
end;procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
l:integer;
rc_text:string;
rc_name:string;
begin
rc_text:=socket.ReceiveText;
rc_name:=socket.RemoteHost;
listbox2.Items.Add(rc_name+':'+rc_text);
for l:=0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[l].SendText(rc_name+':'+ rc_text) ;
end;procedure TForm1.ListBox2DblClick(Sender: TObject);
begin
showmessage(listbox1.Items[listbox1.Itemindex]);
end;procedure TForm1.FormCreate(Sender: TObject);
beginend;end.
客户端
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
CheckBox1: TCheckBox;
ClientSocket1: TClientSocket;
Button1: TButton;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
ListBox1: TListBox;
ListBox2: TListBox;
Edit2: TEdit;
procedure CheckBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ListBox1DblClick(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if not clientsocket1.Active then
clientsocket1.Address:=edit1.Text;
if not checkbox1.Checked then
listbox2.Clear;
clientsocket1.Active:=checkbox1.Checked;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
clientsocket1.Socket.SendText(edit2.Text);
edit2.Text:='';
end;procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
us_text:string;
begin
us_text:=Socket.ReceiveText;
if CompareStr('^Get refresh', us_text)=0 then
listbox2.Clear
else
begin
if pos('$', us_text)=1 then
listbox2.Items.Add( us_text)
else
listbox1.Items.Add( us_text);
end;
end;procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then
begin
clientsocket1.Socket.SendText(edit2.Text);
edit2.Text:='';
end;
end;procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
showmessage(listbox1.Items[listbox1.Itemindex]);
end;procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
beginend;end.
不是打出来了吗?