我正在研究如何将OCaml TCP/IP堆栈集成到我的C++项目中。多亏了这个答案,我已经知道如何从OCaml调用C和从C调用OCaml:OCaml as C library, hello world example OCaml将由C++控制,而不是反过来。因此,对于TCP/IP堆栈,我必须能够发送和接收数据包。我可以很容易地通过C++将数据发送到TCP/IP协议栈,但如何接收数据?我需要将一个C函数(回调)作为参数传递给OCaml,以便它在数据到达时传递数据。有可能吗?
首先,我知道TCP和UDP之间的区别,我知道在使用UDP时可能会丢失一些数据包。
然而,当我们假设我为UDP设计了一个带有一些简单ACK的协议时,我如何确保我发送/接收了整个数据?
例如,对于TCP套接字,它非常简单:
接收:
def recvall(sock, n):
i = 0
data = ""
while i < n:
data += sock.recv(1)
i += 1
return data
然后发送:sock.sendall(msg)。
在使用UDP套接字时,应该如何做类似的事情?
我正在开发一个通过套接字接收tcp数据的低延迟金融应用程序。
这就是我建立套接字连接和接收字节的方式:
public class IncomingData
{
Socket _Socket;
byte[] buffer = new byte[4096];
public static void Connect(IPEndPoint endPoint)
{
_Socket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream,