with Gnat.Sockets; use Gnat.Sockets; with Ada.Text_Io; with System; use System; with Gnat.Threads; use Gnat.Threads; pragma Warnings(Off); with System.Tasking; use System.Tasking; with System.Address_To_Access_Conversions;
with Gnat.Io; use Gnat.Io;
procedure Server_Threads is
type Thread_Array isarray(1 .. 10)of Task_Id; Thread : Thread_Array;
type Saddr isarray(1 .. 10)of System.Address; Sa : Saddr;
offset:integer range 0..1000;
procedure Server is Address : Sock_Addr_Type; Server : Socket_Type; Socket : Socket_Type; Channel : Stream_Access;
TCP
with Gnat.Sockets;
use Gnat.Sockets;
with Ada.Text_Io;
with System;
use System;
with Gnat.Threads;
use Gnat.Threads;
pragma Warnings(Off);
with System.Tasking;
use System.Tasking;
with System.Address_To_Access_Conversions;
with Gnat.Io;
use Gnat.Io;
procedure Server_Threads is
type Thread_Array is array (1 .. 10) of Task_Id;
Thread : Thread_Array;
type Saddr is array (1 .. 10) of System.Address;
Sa : Saddr;
offset:integer range 0..1000;
procedure Server is
Address : Sock_Addr_Type;
Server : Socket_Type;
Socket : Socket_Type;
Channel : Stream_Access;
A : Integer := 1;
begin
Initialize (Process_Blocking_Io => False);
Address.Addr := Inet_Addr("192.168.1.102") ;
Address.Port:=2000+port_type(offset);
put(integer(address.port));
Create_Socket(Server);
Set_Socket_Option
(Server,
Socket_Level,
(Reuse_Address, True));
Bind_Socket (Server, Address);
Listen_Socket (Server);
Accept_Socket (Server, Socket, Address);
Channel := Stream (Socket);
delay 1.0;
<<Loop_Rec>>
Ada.Text_Io.Put_Line(String'Input(Channel));
String'Output(Channel,"Hello,have recied your message!" & Integer'
Image(A));
A:=A+1;
delay 1.0;
goto Loop_Rec;
Close_Socket(Server);
Close_Socket(Socket);
end Server;
begin
for I in 1..10 loop
offset:=I;
Thread(I):=To_Task_Id(Create_Thread(Server'Address,null,0,1));
end loop;
end Server_Threads;