ADA语言的socket通讯程序

2097阅读 0评论2008-10-17 mistyrain
分类:

ADA socket通讯程式及解释
Author: misty (qibing83@yahoo.com.cn)
本程序使用GNAT.Sockets编写,参考GNAT中的g-socket.ads文件的注释。包括server端和client的程序:其中client循环向server端发送”hello world”字符串,server端循环接收4次并打印出来接收到的字符串,当接收完4次后关闭socket通道并退出。
--file server.adb, this program receive the message from client
with Ada.Text_IO; use Ada.Text_IO;
with GNAT.Sockets; use GNAT.Sockets;
procedure Server is
   Address : Sock_Addr_Type;
   Socket  : Socket_Type;
   Server  : Socket_Type;
   Channel : Stream_Access;
 
begin
      --  Create socket and listen input from client
      Initialize;
      Address.Addr := Addresses (Get_Host_By_Name (Host_Name), 1);
      --Address.Addr := Inet_Addr("172.0.0.1");
      Address.Port := 2543;
 
      Create_Socket (Server);
 
      Bind_Socket (Server, Address);
 
      Listen_Socket (Server);
 
 
      Accept_Socket (Server, Socket, Address);
      --  A client has been accepted, get the stream connected to the socket
 
      Channel := Stream (Socket);
 
   for K in 1 .. 4 loop
      declare
         Message : String := String'Input (Channel);
      begin
         Address := Get_Address (Channel);
         Ada.Text_IO.Put_Line (Message & " from " & Image (Address));
         Ada.Text_IO.Put_Line (Message);
      end;
   end loop;
   Close_Socket (Server);
   Close_Socket (Socket);
end Server;
 
--file client.adb, this program send a message to server
with Ada.Text_IO;  use Ada.Text_IO;
with GNAT.Sockets; use GNAT.Sockets;
 
procedure Client is
 
   Address  : Sock_Addr_Type;
   Socket   : Socket_Type;
   Channel  : Stream_Access;
   i : Integer := 1;
   Message : string := "hello world";
 
begin
   Initialize;
 
   Address.Addr := Addresses (Get_Host_By_Name (Host_Name), 1);
   --Address.Addr := Inet_Addr("172.0.0.1");
   Address.Port := 2543;
   Create_Socket (Socket);
 
   Connect_Socket (Socket, Address);
   --  Connected, use a stream connected to the socket
 
   Channel := Stream (Socket);
 
   loop
      Put_Line ("(client) O1 size " & Integer'Image (i));
      String'Output (Channel, Message);
      delay 3.0;
      i := i + 1;
      exit when i = 3;
   end loop;
   Close_Socket(Socket);
end Client;
Server.adbclient.adb分别编译为两个可执行文件,首先运行server.exe,再运行client.exe
文件: client.rar
大小: 0KB
下载: 下载
文件: server.rar
大小: 0KB
下载: 下载
上一篇:ADA开发环境的建立
下一篇:嵌入式Linux开发常用的实用命令