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

TCP有关问题

2012-04-23 
TCP问题Delphi(Pascal) codeprocedure TRealMessengerX.SendIdentity //验证身份varLoginTime: IntegerC

TCP问题

Delphi(Pascal) code
procedure TRealMessengerX.SendIdentity; //验证身份var  LoginTime: Integer;  CBLogin: TCBLogin;  Buffer: array[1..2048] of char;     StrHttpProxySend, StrHttpProxyRecive: string;begin  if ClientTCP.Connected=false then  //窗体自带TCP控件连接没有打开的情况下……      begin   //  showmessage(trim(SystemSetForm.EDHostName.Text));   // showmessage(SystemSetForm.EDHostName.Text);    if inet_addr(PChar(HostIP))=INADDR_NONE then      ClientTCP.Host:=HostName    else      ClientTCP.Host:=HostIP;    ClientTCP.Port:=ServerPort;    {ClientTCP.Host := trim(SystemSetForm.EDHostName.Text);    ClientTCP.Port := StrToInt(SystemSetForm.EDHostName.Text);}    try      MConnect.Caption := '取消登录(&I)';      Gauge.Progress := 0;      PBLogin.Visible := True;      LblLoging.Caption := '正在连接...';      LblLoging.Visible := True;      LblCancelLogin.Visible := True;      if ProxyCategory <> pcHTTP then  //代理种类如果不是HTTP,为真      begin        IdSocksInfo1.Version := TSocksVersion(ProxyCategory);        IdSocksInfo1.Host := ProxyAddress;        IdSocksInfo1.Port := ProxyPort;        if ProxyUsername = '' then        begin          IdSocksInfo1.Authentication := saNoAuthentication;        end        else        begin          IdSocksInfo1.Authentication := saUsernamePassword;          IdSocksInfo1.Username := ProxyUsername;          IdSocksInfo1.Password := ProxyPassword;        end;        LoginTime := 0;        while LoginTime < 3 do        try          ClientTCP.Connect(8000);  //TCP尝试连接三次          break;        except          Inc(LoginTime);        end;      end      else      begin        IdSocksInfo1.Version := svNoSocks;        StrHttpProxySend := Format('CONNECT %s:%d HTTP/1.0'#$d#$a#$d#$a + 'Host %s'#$d#$a, [ClientTCP.Host, ClientTCP.Port, ClientTCP.Host]);        ClientTCP.Host := ProxyAddress;        ClientTCP.Port := ProxyPort;        ClientTCP.Connect(8000);        ClientTCP.Write(StrHttpProxySend);  //写入字符HTTP代理发送字符串中        StrHttpProxyRecive := ClientTCP.ReadLn; //(EOL); 读取信息,保存至HTTP代理接受字符串中        ClientTCP.ReadLn;        ClientTCP.ReadLn;        if Copy(StrHttpProxyRecive, 1, 12) <> 'HTTP/1.0 200' then        ClientTCP.Disconnect;      end;    except    end;    if not ClientTCP.Connected then    begin      ClientLogout;      CoolTrayIcon.ShowBalloonHint('连接失败', '未能连接至服务器,请检查网络设置!', bitError, 10);      exit;    end;    ClientHandleThread := TClientHandleThread.Create; // 窗体TCP控件如果连接没有打开的情况下。激活线程开始工作    ClientHandleThread.FreeOnTerminate := True; //线程如果推出,释放所有资源    ClientHandleThread.Resume; //唤醒        if   ClientTCP.Connected = False  end;//既然都没有保持连接,为什么还要用一个线程来读取服务器信息?  CBLogin.LoginName := LoginName; //用户名  CBLogin.Password := Password; //密码  CBLogin.State := LoginState; //状态:联机  CBLogin.LocalIP := GetHostIP(''); //本机IP  CBLogin.LocalPort := ClientTCP.Socket.Binding.Port;  //本机端口  CBLogin.HaveAudioDevice := HaveAudioDevice;  CBLogin.HaveVideoDevice := HaveVideoDevice;  CBLogin.MACNO := MACNO;  CBLogin.Version := 40000;  //版本  Buffer[1] := skLogin;   CopyMemory(@Buffer[2], @CBLogin, SizeOf(CBLogin));  ClientTCP.Socket.Send(Buffer, SizeOf(CBLogin) + 1); //将登录信息,用TCP方式,发送至登录服务器;  LblMyState.Caption := '正在登录...';end;

if ClientTCP.Connected=false then//这一句,既然没有保持连接,为什么还要用一个线程来读取服务器信息?

[解决办法]
ClientTCP.Connect(8000); 这里有连接啊 。
所以线程开启 啊。
[解决办法]
那要看看 你的线程是干什么的了
[解决办法]
既然都没有保持连接,为什么还要用一个线程来读取服务器信息?

读取服务信息 是为了得到服务器信息 
以便 连接?
没有服务器信息 连接不了?

热点排行