Ich bin gerade dabei einen kleinen
Chat mit
Server und Clients zu programmieren. Dabei benutze ich keine Komponenten. Der
Server wartet dabei in einem Thread auf Clients, die sich verbinden. Jeder Client kommt in ein Array. Dann geht der
Server im Thread jedes mal dieses Array durch und guckt, ob vom entsprechenden Client was kommt:
Delphi-Quellcode:
function ServerThread(p: Pointer): Integer;
var
TempConSocket: TSocket;
i: Integer;
MsgBuffer: array[0..255] of Char;
resourcestring
rsListen = 'Listening...';
rsSocketOK = 'Neuer Client hat sich verbunden.';
rsSocketError = 'Ungültige Socket';
rsMsg = 'Client: %s';
begin
bRunning := True;
if listen(acceptSock, 10) <> SOCKET_ERROR then
begin
AddLogText(hApp, IDC_LV, rsListen, 2);
while bRunning do
begin
listen(acceptSock, 10);
TempConSocket := accept(acceptSock, nil, nil);
if TempConSocket <> INVALID_SOCKET then
begin
SetLength(conSocket, length(conSocket)+1);
conSocket[High(conSocket)] := TempConSocket;
AddLogText(hApp, IDC_LV, rsSocketOK, 2);
end
else
AddLogText(hApp, IDC_LV, rsSocketError, 0);
for i := 0 to length(conSocket) - 1 do
begin
if recv(conSocket[i], MsgBuffer, sizeof(MsgBuffer), 0) > 0 then
AddLogText(hApp, IDC_LV, Format(rsMsg, [String(MsgBuffer)]), 2);
Zeromemory(@MsgBuffer, sizeof(MsgBuffer));
end;
end;
end
else
AddLogText(hApp, IDC_LV, SysErrorMessage(WSAGetLastError), 0);
result := 0;
end;
Aber irgendwie kann ich nur einmal was an den
Server senden. Alles weitere kommt nicht an. irgendwo, muss da ein Denkfehler von mir sein.