使用Ada进行TCP / IP握手

时间:2014-03-06 04:54:34

标签: ada tcp-ip

有没有办法在不使用c ++ Pragma的情况下在Ada中执行3路TCP / IP握手?

如果是这样,有人有例子吗?

2 个答案:

答案 0 :(得分:2)

如果您使用的是GNAT,答案是使用GNAT.Sockets;根据该软件包的规范,服务器端(use GNAT.Sockets):

Address.Addr := Addresses (Get_Host_By_Name (Host_Name), 1);
Address.Port := 5876;
Create_Socket (Server);
Set_Socket_Option
  (Server,
   Socket_Level,
   (Reuse_Address, True));
Bind_Socket (Server, Address);
Listen_Socket (Server);
Accept_Socket (Server, Socket, Address);

和客户方:

Address.Addr := Addresses (Get_Host_By_Name (Host_Name), 1);
Address.Port := 5876;
Create_Socket (Socket);
Set_Socket_Option
  (Socket,
   Socket_Level,
   (Reuse_Address, True));
Connect_Socket (Socket, Address);

如果您不使用GNAT,您可能会很幸运地发现您的编译器提供了等效的。如果您正在使用GNAT,但希望了解它们是如何完成的,请查看GNAT.Sockets的正文。

答案 1 :(得分:0)

如果你想控制你自己发送SYN,SYN-ACK和ACK包,你必须规避TCP堆栈,因为这就是TCP堆栈为你做的,所以你不必自己动手

如何规避TCP堆栈取决于您的操作系统。