client.lpr 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. program client;
  2. {$mode objfpc}{$H+}
  3. uses
  4. {$IFDEF UNIX}
  5. CThreads,
  6. {$ENDIF}
  7. TcpIpClient, SysUtils, Classes;
  8. type
  9. { TClientThread }
  10. TClientThread = class(TThread)
  11. private
  12. FSocket: TTcpIpClientSocket;
  13. public
  14. constructor Create(ASocket: TTcpIpClientSocket);
  15. procedure Execute; override;
  16. end;
  17. { TClientThread }
  18. constructor TClientThread.Create(ASocket: TTcpIpClientSocket);
  19. begin
  20. inherited Create(False);
  21. FreeOnTerminate := True;
  22. FSocket := ASocket;
  23. end;
  24. procedure TClientThread.Execute;
  25. var
  26. VData: string;
  27. VDataSize: Integer;
  28. begin
  29. while not Terminated do
  30. begin
  31. if not FSocket.CanRead(1000) then
  32. Continue;
  33. VDataSize := FSocket.Waiting;
  34. SetLength(VData, VDataSize);
  35. VDataSize := FSocket.Read(Pointer(VData)^, VDataSize);
  36. if VDataSize < 1 then
  37. Exit;
  38. WriteLn(VData);
  39. end;
  40. end;
  41. var
  42. VNickName, VData: string;
  43. VClient: TTcpIpClientSocket;
  44. begin
  45. WriteLn('Put your nick name: ');
  46. Read(VNickName);
  47. if Trim(VNickName) = '' then
  48. Halt;
  49. VClient := TTcpIpClientSocket.Create('localhost', 4100);
  50. try
  51. TClientThread.Create(VClient);
  52. repeat
  53. ReadLn(VData);
  54. if Trim(VData) = '' then
  55. Continue;
  56. VData := VNickName + ': ' + VData;
  57. VClient.Write(Pointer(VData)^, Length(VData));
  58. until False;
  59. finally
  60. VClient.Free;
  61. end;
  62. end.