Cześć,
edukowalem sie ostatnio z socketow za pomoca artykulu SimpleCharServer: Simple Chat Server
Wszystko dziala super, informacje docieraja do Klientow. Naszlo mnie jednak takie cos: chcialbym wydawac polecenia serwerowi z poziomu konsoli jednak nie mam mozliwosci zeby wpisac cokolwiek. Czy pisanie w konsoli jest mozliwe dopiero kiedy serwer czeka z readLn na to co wpisze admin? Jak to ugryzc zeby serwer obslugiwal klientow tak jak do tej pory i jednoczesnie czekal na komendy od admina np wyslanie wiadomosci do konkretnego klienta?
Chodzi o to, gdzie w tej glownej czesci umiescic wlasnie odbieranie komunikatow od admina...
begin
Val(ParamStr(1), Port, Tmp);
if Port = 0 then begin
WriteLn('Nieprawidlowy port.');
Halt(0);
end;
if WSAStartUp(MAKEWORD(1,1), WSAData) <> 0 then begin
WriteLn('Blad Windows Sockets DLL.');
Halt(0);
end;
Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
AdrL.sin_family := AF_INET;
AdrL.sin_addr.S_addr := htonl(INADDR_ANY);
AdrL.sin_port := htons(Port);
bind(Sock, AdrL, SizeOf(AdrL));
if listen(Sock, 5) = SOCKET_ERROR then begin
WriteLn('Blad gniazda.');
Exit;
end;
SetConsoleCtrlHandler(@HandlerRoutine, True);
WriteLn('Serwer uruchomiony na porcie ',Port,'...');
repeat
I := 0;
while I < Length(Clnts) do begin
if Clnts[I] = INVALID_SOCKET then Break;
Inc(I);
end;
if I = Length(Clnts) then SetLength(Clnts, I + 1);
Tmp := SizeOf(AdrR);
Clnts[I] := accept(Sock, @AdrR, @Tmp);
if Clnts[I] = INVALID_SOCKET then Break;
New(PInt);
PInt^ := I;
CreateThread(nil, 0, @SockThread, PInt, 0, Tmp);
until false
Dzieki za pomoc:)