Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188957
  • 博文数量: 17
  • 博客积分: 2641
  • 博客等级: 少校
  • 技术积分: 271
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-28 20:11
文章分类

全部博文(17)

文章存档

2014年(2)

2012年(2)

2011年(4)

2010年(1)

2009年(1)

2008年(7)

分类:

2008-10-17 12:56:14

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
下载: 下载
阅读(1947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~