SimpleChatServer - wydawanie poleceń

0

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:)

0

Ok, wymyslilem, ze stworze nowy watek czytajacy to co pisze uzytkownik i odpowiednio reagujacy na polecenia. Zobaczymy czy to zadziala.

1 użytkowników online, w tym zalogowanych: 0, gości: 1