Here’s what ChatGPT says. It just used the UNIX sockets API so nothing
different from what you’d see in C. Looks pretty much correct to me but I
didn’t try to build it.

program TCPClient;

uses
  SysUtils, Sockets;

const
  HOST = '127.0.0.1';
  PORT = 12345;

var
  ClientSocket: LongInt;
  Address: TInetSockAddr;
  Buffer: array[0..1023] of Char;
  BytesReceived: LongInt;
begin
  // Create a socket
  ClientSocket := fpSocket(AF_INET, SOCK_STREAM, 0);
  if ClientSocket = -1 then
  begin
    WriteLn('Error creating client socket.');
    Halt(1);
  end;

  // Connect to the server
  FillChar(Address, SizeOf(Address), 0);
  Address.sin_family := AF_INET;
  Address.sin_port := htons(PORT);
  Address.sin_addr := StrToHostAddr(HOST);

  if fpConnect(ClientSocket, @Address, SizeOf(Address)) = -1 then
  begin
    WriteLn('Error connecting to server.');
    Halt(1);
  end;

  WriteLn('Connected to server.');

  // Send data to the server
  fpSend(ClientSocket, 'Hello from the client!', 23, 0);

  // Receive response from the server
  BytesReceived := fpRecv(ClientSocket, @Buffer, SizeOf(Buffer) - 1, 0);
  if BytesReceived > 0 then
  begin
    Buffer[BytesReceived] := #0; // Null-terminate the string
    WriteLn('Received: ', Buffer);
  end;

  // Close the socket
  fpClose(ClientSocket);
end.

program TCPServer;

uses
  SysUtils, Sockets;

const
  PORT = 12345;

var
  ServerSocket, ClientSocket: LongInt;
  Address: TInetSockAddr;
  Buffer: array[0..1023] of Char;
  BytesReceived: LongInt;
begin
  // Create a socket
  ServerSocket := fpSocket(AF_INET, SOCK_STREAM, 0);
  if ServerSocket = -1 then
  begin
    WriteLn('Error creating server socket.');
    Halt(1);
  end;

  // Bind the socket to a port
  FillChar(Address, SizeOf(Address), 0);
  Address.sin_family := AF_INET;
  Address.sin_port := htons(PORT);
  Address.sin_addr := htonl(INADDR_ANY);

  if fpBind(ServerSocket, @Address, SizeOf(Address)) = -1 then
  begin
    WriteLn('Error binding server socket.');
    Halt(1);
  end;

  // Start listening for incoming connections
  if fpListen(ServerSocket, 5) = -1 then
  begin
    WriteLn('Error listening on server socket.');
    Halt(1);
  end;

  WriteLn('Server is running on port ', PORT, '. Waiting for
connections...');

  // Accept a connection
  ClientSocket := fpAccept(ServerSocket, nil, nil);
  if ClientSocket = -1 then
  begin
    WriteLn('Error accepting connection.');
    Halt(1);
  end;

  WriteLn('Client connected.');

  // Receive data from the client
  BytesReceived := fpRecv(ClientSocket, @Buffer, SizeOf(Buffer) - 1, 0);
  if BytesReceived > 0 then
  begin
    Buffer[BytesReceived] := #0; // Null-terminate the string
    WriteLn('Received: ', Buffer);
  end;

  // Send a response to the client
  fpSend(ClientSocket, 'Hello from the server!', 23, 0);

  // Close sockets
  fpClose(ClientSocket);
  fpClose(ServerSocket);
end.

Regards,
    Ryan Joseph


On Jan 11, 2025 at 7:46:50 PM, Duke Normandin via fpc-pascal <
fpc-pascal@lists.freepascal.org> wrote:

> I’ve Googled my butt off looking for fpc/pascal examples
> /tutorials on writing a simple tcp client and server. NO JOY! Anybody got
> any ideas? TIA
> —
> Duke
> Sent from my iPhone
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to