gpt4 book ai didi

sockets - Ada 和 Python 之间的 TCP 套接字

转载 作者:行者123 更新时间:2023-12-03 11:52:41 29 4
gpt4 key购买 nike

我对 Ada 很陌生,想在 Ada 和 Python 之间创建一个 TCP 套接字。 Ada 程序应充当服务器,Python 程序应充当客户端。主要用例是从 Python 接收字符串命令并确认它们的执行。
没有 Ada.Streams.Write(Channel.All, Data);在 Ada 服务器和 data = s.recv(512)至少可以从 Python 客户端接收 Hello World。
我想从 Ada 服务器向 Python 客户端发送一个答案,这就是我卡住的地方。我收到“套接字错误连接超时”。
阿达服务器:

   use GNAT.Sockets;
Server : Socket_Type;
Socket : Socket_Type;
Address : Sock_Addr_Type;
Channel : Stream_Access;
Data : Stream_Element_Array(1 .. 512);
Last : Stream_Element_Offset;
S : Unbounded_String;
begin
Put_Line("Server Config Started..");
Create_Socket(Server);
Set_Socket_Option(Server,
Socket_Level,
(Reuse_Address, True));
Set_Socket_Option(Server, Socket_Level,(Receive_Timeout, Timeout => 5.0));
Bind_Socket(Server, Address => (Family => Family_Inet, Addr => Inet_Addr("127.0.0.2"), Port => 65432));
Listen_Socket(Server);
Accept_Socket(Server, Socket, Address);
Put_Line("Client connected from:" & Image(Address));
Channel := Stream(Socket);
Ada.Streams.Read(Channel.All, Data, Last);
Put_Line("Received:");
for I in 1 .. Last loop
Put(Character'Val(Data(I)));
end loop;
Ada.Streams.Write(Channel.All, Data);
Python客户端:
HOST = '127.0.0.2'  
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b'Hello, world')
data = s.recv(512)
我究竟做错了什么?有人提示吗?
提前致谢。

最佳答案

事情没有按照你希望的方式进行的原因是你把 Receive_Timeout Server 上的套接字选项 socket ;你需要把它放在Socket相反,因为那是您从中接收的套接字。
就目前情况而言:电话

Ada.Streams.Read(Channel.All, Data, Last);
将在读取 Data’Length 时终止(512) 字节或当另一端关闭套接字时。
在您包含 data = s.recv(512) 之前在 Python 脚本结束时,Python 正在关闭套接字。
现在,它正在等待 Ada 端将其发送回 512 个字节 - 而 Ada 端正在等待 Python 端将剩余的 (512 - 12) 个字节发送回它。经典的致命拥抱。
怎么修?可能,让 Ada 端逐个字符读取,直到它读取一个终止符(例如 \0 )。或者你可以使用数据报。在任何情况下,您都需要一个协议(protocol)来确定线路上的消息边界。

在 macOS 上,Ada 端在 Python 端发送它后立即打印出它收到的消息。这不是 setsockopt() 的手册页内容。回复: SO_RCVTIMEO !在决定放弃之前,它应该等待超时设置(5 秒)。

关于sockets - Ada 和 Python 之间的 TCP 套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65997036/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com