gpt4 book ai didi

java - Java 如何处理低级 Socket 网络逻辑

转载 作者:行者123 更新时间:2023-12-02 10:03:43 27 4
gpt4 key购买 nike

请有人指出我的源代码,其中 Java 处理低级套接字网络逻辑,就像 C# 使用 [DllImport(WS2_32, SetLastError = true)] 处理低级套接字网络逻辑一样。

我试图了解 Java 如何处理低级网络逻辑,就像 C# 使用 DLLImport 处理底层网络逻辑一样。

很难跟踪 java.net.Socket 中 SocketImpl 或 SocketImplFactory 逻辑的实现源代码。即使我能够追踪到AbstractPlainSocketImpl.java SocketImpl 的实现似乎没有 connect0 的实现来深入挖掘。

最佳答案

您应该寻找 java.net.SocketImpl 的具体子类像DualStackPlainSocketImpl

有些地方可以实现调用 native 函数:

connectResult = connect0(nativefd, address, port);
....
static native int connect0(int fd, InetAddress remote, int remotePort)
throws IOException;

native 代码通常是特定于平台的,并由 C++ 或 C 实现。来自 DualStackPlainSocketImpl.c 的一个 Windows 示例OpenJDK/jdk8u:

JNIEXPORT jint JNICALL Java_java_net_DualStackPlainSocketImpl_connect0
(JNIEnv *env, jclass clazz, jint fd, jobject iaObj, jint port)
{
SOCKETADDRESS sa;
...
rv = connect(fd, (struct sockaddr *)&sa, sa_len);

在示例中 connnect() 调用可能是您正在寻找的级别:WinSock2 API call在Windows中。从 Linux 源代码中你会发现类似的 connnect()系统调用。

关于java - Java 如何处理低级 Socket 网络逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55453951/

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