Ok
Danke für die Mühe ich hoffe es findet sich da jemand
das gibt es nicht oft Hilfe für umsonst.
Foren sind geil
Also ich habe alles noch einmal genauer zusammengefasst das man nicht so viel blättern muss.
Folgendes Problem:
ich sende ein MSGBOX | Hallo , vom Client an den server.
es kommt hier noch richtig an:
Delphi-Quellcode:
procedure TServer.Connect;
var
Buffer: Array[0..8192] Of AnsiChar;
iRecv: Integer;
Begin
if (WSAStartup($0202, wsaData) <> 0) then
begin
Writeln('Unable to start winsock, unable to continue');
Readln;
Exit;
end;
Close := False;
repeat
//Prepare a listen socket to be used for our connection
//and declare its host/port information
hSocket := Socket(AF_INET, SOCK_STREAM, 0);
Addr.sin_family := AF_INET;
Addr.sin_port := htons(hPort);
Addr.sin_addr.S_addr := INET_ADDR(PAnsiChar(GetIPFromHost(hHost)));
Writeln('Connecting to ' + GetIPFromHost(hHost));
//Attempt the connection using our socket
if (Winsock.Connect(hSocket, Addr, SizeOf(Addr)) = 0) then
begin
Writeln('Connected to host');
//Notify our connected client of the connection and send
//our information
SendData('ADDNEW|' + UserName + '|' + CompName + '|' + 'Awaiting commands');
//Attempt to receive data from our socket.
ZeroMemory(@Buffer, SizeOf(Buffer));
iRecv := Recv(hSocket, Buffer, SizeOf(Buffer), 0);
while ((iRecv > 0) and (iRecv <> INVALID_SOCKET)) do // <-----------Im Buffer ist alles ok
begin
ReceiveData(hSocket, @Buffer); // <-----------Im Buffer ist alles ok
ZeroMemory(@Buffer, SizeOf(Buffer));
iRecv := Recv(hSocket, Buffer, SizeOf(Buffer), 0);
end;
Und dann der Fehler wo ich nicht weis woran es liegt:
Delphi-Quellcode:
procedure TServer.ReceiveData(Socket: TSocket; Buffer: PByte);
var
Data: AnsiString;
strArr: TDynStringArray;
begin
//Convert our data to a AnsiString and trim it
Data := AnsiString(Buffer);
Data := Trim(Data); // <-----------Im Buffer Sind nurnoch Fragezeichen
if Length(Data) > 0 then begin // <-----------in Data Sind die Fragezeichen
//Setup our dynamic array structure
StrArr := Explode('|', Data); // <-----------in Data Sind die Fragezeichen
//Display incoming message (if strArr[0] = 'MSGBOX')
if StrArr[0] = 'MSGBOX' then begin
MessageBox(0,PChar(StrArr[1]),'Winsock Example',MB_OK + MB_ICONINFORMATION);
end;
Und die Fragezeichen gehen so durch Explode durch und am ende bei ZeroMemory(@Buffer, SizeOf(Buffer)); ist die Nachricht wieder richtig zusehen im Buffer was ist da dazwischen was falsch ist???
das Ganze Projekt habe ich auf mein Server hochladen und ein paar Einträge von mir weiter hinten kann man sich es runterladen mit dem Client und alles was dazugehört.