有没有办法在不使用c ++ Pragma的情况下在Ada中执行3路TCP / IP握手?
如果是这样,有人有例子吗?
答案 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堆栈取决于您的操作系统。