请有人指出我的源代码,其中 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/