Hallöchen alle miteinander
Als letzte Rettung wende ich mich nun an euch, mein Problem ist folgendes:
Für ein Projekt möchte ich gerne, dass mein Programm mit meinem Linux-Server(Debian Lenny) kommunizieren kann. Aus diesem Grunde habe ich mir auch ganz brav folgendes Tutorial durchgelesen:
www.delphi-library.de/topic_60744.html
Auf meinem eigenen Rechner hat das natürlich auch wunderbar geklappt. Da ich dann aber auch mit meinem Server kommunizieren wollte, habe ich (nachdem Studieren verscheidener Beiträge zu dem Thema aus dem Netz) folgenden Code zusammengebastelt, der dann erfreulicherweise auf meinem eigenen PC auch korrekt funktionierte(damit WINE das zum laufen bringt, sollte es eine Konsolenanwendung sein, daher die Mühe):
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: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116:
| program ChatServer;
{$APPTYPE CONSOLE}
uses SysUtils, ScktComp, Classes, Windows;
type TMainThread = class(TThread) public procedure Run; end;
TServerThread = class(TThread) ServerSocket: TServerSocket; Port: Word; constructor Create; destructor Destroy; procedure OnClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); procedure OnClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); procedure OnServerShutDown(SendText: String); end;
var MainThread: TMainThread; ServerThread: TServerThread; i: Integer; Msg: TMsg;
procedure TMainThread.Run; begin Write(#7); ReadLn; end;
constructor TServerThread.Create; begin inherited Create(True); ServerSocket:=TServerSocket.Create(nil); end;
destructor TServerThread.Destroy; begin ServerSocket.Destroy; inherited Destroy; end;
procedure TServerThread.OnClientConnect(Sender: TObject; Socket: TCustomWinSocket); begin writeln('Client hat verbunden'); Socket.SendText('Moin'); end;
procedure TServerThread.OnClientRead(Sender: TObject; Socket: TCustomWinSocket); begin writeln(Socket.ReceiveText); for i := 0 to ServerSocket.Socket.ActiveConnections-1 do ServerSocket.Socket.Connections[i].SendText(Socket.ReceiveText); end;
procedure TServerThread.OnClientDisconnect(Sender: TObject; Socket: TCustomWinSocket); begin writeln('Client disconnected'); end;
procedure TServerThread.OnServerShutDown(SendText: String); begin writeln(SendText); end;
begin ServerThread := TServerThread.Create; with ServerThread do begin ServerSocket.OnClientConnect:=ServerThread.OnClientConnect; ServerSocket.OnClientDisconnect:=ServerThread.OnClientDisconnect; ServerSocket.OnClientRead:=ServerThread.OnClientRead; end;
WriteLn('ChatServer'); WriteLn; Write('Port: '); ReadLn(ServerThread.Port);
ServerThread.ServerSocket.Active:=False; ServerThread.ServerSocket.Port:=ServerThread.Port;
try ServerThread.ServerSocket.Open;except ServerThread.ServerSocket.Active:=False; WriteLn('ERROR!'); end;
WriteLn('Server is running.'); while GetMessage(Msg, 0, 0, 0) do begin TranslateMessage(Msg); DispatchMessage(Msg); end; ReadLn;
ServerThread.Destroy; end. |
In WINE resultiert das allerdings in folgende Ausgabe:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| ChatServer
Port: 12345 Application tried to create a window, but no driver could be loaded. Make sure that your X server is running and that $DISPLAY is set correctly. Application tried to create a window, but no driver could be loaded. Make sure that your X server is running and that $DISPLAY is set correctly. Server is running. |
Nach kurzem Debuggen habe ich herausgefunden, dass der Fehler ziemlich sicher beim ServerSocket.Open auftritt! Was zum Teufel geschiet da, was diesen Error hervorrufen könnte? Und wie kriege ich das ganze unter WINE zum laufen?
Denn wenn das erstmal so funktioniert, könnte ich das Tutorial weiter durcharbeiten, um es weiter mit Funktionen auszuschmücken
Und wenn das ganze garnicht und auf keinen Fall auf diese Weise realisierbar ist, muss ich das ganze vermutlich wohl unter Lazarus realisieren

Aber wirklich nur im Notfall, da das für mich Neuland ist

Also, falls ihr mir von vorneherein sagt, dass das nicht möglich ist, benötige ich da hilfe
Ich freue mich schon auf eure kompetenten Ratschläge,
MFG cyberbug