我在用clientsocker和serversocket做的通讯程序中用到clientsocket1connect,clientsocket1error,clientsocket1read几个过程,但是在测试时发现以下问题:当我第一次输入正确的clientsocket1.Host值时,可以连接成功,取得正确的连接数据,第二次输入错误的clientsocket1.Host值时,程序运行到clientsocket1error,并提示连接错误信息“connect error”。第三次输入正确的clientsocket1.Host值时,却又显示connect error”,只有第四次输入正确的clientsocket1.Host值时,才显示连接成功,取得连接数据。
这是什么原因呢?clientsocket1connect, clientsocket1error, clientsocket1read的激发顺序是什么样的呢?
这是什么原因呢?clientsocket1connect, clientsocket1error, clientsocket1read的激发顺序是什么样的呢?
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
ErrorCode := 0;
showmessage('connect error');
end;
var WSData:TWSAData;
begin
if WSAstartup(2,WSData)<>0 then begin //为程序使用WS2_32.DLL初始化
showmessage('WS2_32.DLL初始化失败!');
halt;
end;
clientsocket1.Close;
clientsocket1.Host:=dserver;
ClientSocket1.Port:=10050; serveropen:=false; //是否连接上的标识变量
timer1.Enabled:=true;//用来监听连接是否建立的时钟 ClientSocket1.Open;
end;
begin
if WSAstartup(2,WSData)<>0 then begin //为程序使用WS2_32.DLL初始化
showmessage('WS2_32.DLL初始化失败!');
不需要吧?我从来没写过;呵呵;
begin
if serveropen then
begin
bitbtn1.Enabled :=true;//允许设置服务器名
login.Enabled :=true;//允许登录
exit.Enabled :=true;
label5.Caption :='服务器 '+dserver+' 连接成功!'; closetimer;//关闭时钟
loginname.SetFocus;
end
else
begin
bitbtn1.Enabled:=true;
login.Enabled :=false;
exit.Enabled :=true;
combobox1.Items.Clear;
combobox1.Text:='';
if label5.Caption<>'没有检测到服务器的设置,请按设置!' then
label5.Caption :='正在连接服务器 '+dserver+' !';
end;
end;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
if ErrorCode>0 then
begin
错误处理
end;
我用你的方法试过了,可是在用一个错误的服务器名做测试时,运行到显示消息框“connect error”后,系统就报错:Esocketerror with message ' windows socket error: 不知道这样的主机'。procedure Tfrmlogin.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode>0 then
begin
//错误处理
showmessage('connect error');
clientsocket1.Close;
end;
end;