Hallo Community,
ich habe folgendes Problem:
Ich hab einen Thread erstellt, der nur dafür verwendet wird,
eine Verbindung zu meiner Server-Anwendung herzustellen
und in einer Schleife auf Pakete zu warten.
Angeblich ist der Client verbunden, aber Server-seitig besteht keine Verbindung.
Liegt das vermutlich an dem Blocking-Mode?
In Zeile 65 wird der Thread übrigens im Debugger (ohne Meldung) verlassen,
direkt nach Socket.SendBuf.
Der Code sieht etwas komisch aus - ist momentan noch experimenteller Code.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87:
| function TNetThread.MadeConnection(): Boolean; var Buf_: TBuffer; FileStream: TFileStream; GAME_PATH: String; begin GAME_PATH := ExtractFilePath(ParamStr(0)); FileStream := TFileStream.Create(GAME_PATH+'Server.tmp',fmOpenRead); buf_ := TBuffer.Create(0); buf_.LoadFromStream(FileStream,Integer(FileStream.Size)); TCPSock := TClientSocket.Create(nil); with TCPSock do begin Address := buf_.GetString(); buf_.GetBuf(@Port,4); ClientType := ctNonBlocking; end; buf_.Free(); FileStream.Free(); TCPSock.Open(); if (TCPSock.Socket.Connected) then begin Result := True; end else Result := False; end;
procedure TNetThread.Execute(); var len: Cardinal; begin NetBuf := nil; Stream := nil; GMNet := nil; NetBuf := TBuffer.Create(512); if not MadeConnection then Destroy(); repeat Sleep(100); until InGame^; if not (TCPSock.Socket.Connected) then Destroy();
try Stream := TWinSocketStream.Create(TCPSock.Socket,600000); except Destroy(); Exit; end;
try GMNet := TGMNet.Create(); except Destroy(); Exit; end; NetBuf.ResetVars(); SendServer(NET_INIT,NetBuf); while (not Terminated) and TCPSock.Socket.Connected do begin if Stream.WaitForData(Stream.TimeOut) then begin try len := NetBuf.LoadFromStream(Stream,512); if (len > 0) then begin GMNet.RunLines(NetBuf); end; except Break; end; end else TCPSock.Socket.Close; end;
Destroy(); end; |
Mit freundlichen Grüßen
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt