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

标签 java sockets

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

相关文章:

java - 如何使用带有专有 java 后端文档系统的 MS Office

java - getInetAddress() 返回 0.0.0.0

java - 以非静态方式访问方法是否会影响/有益于性能?

java - 部署可以自行停止吗?

java - Camel Direct 端点异常

python - 从另一个线程关闭挂起的 zmq 套接字

jquery-ui - YUI3 和 socket.io

java - 当对 ArrayList 使用 .get() 时,该类无法将返回的元素识别为所需的对象

Android Socket 创建失败,Telnet 连接正常

c# - C# 客户端和 C++ 服务器中套接字上的 Unicode 数据