Java 日看一类(61)AbstractPlainSocketImpl类

告别迷茫!用ETAS RTA-OS配置你的第一个AUTOSAR OS任务(含VRTA虚拟ECU实战) 本文详细介绍了如何使用ETAS RTA-OS工具链在VRTA虚拟ECU上配置和运行第一个AUTOSAR OS任务。通过从XML配置到任务调度的全流程实战,帮助开发者快速掌握嵌入式操作系统开发的核心步骤,特别适合刚接触AUTOSAR的开发者快速上手。 阅读详情

该类继承自SocketImpl类

该类引入了如下包:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileDescriptor;

import sun.net.ConnectionResetException;
import sun.net.NetHooks;
import sun.net.ResourceManager;



该类的类头注释如下:

/**
 * Default Socket Implementation. This implementation does
 * not implement any security checks.
 * Note this class should <b>NOT</b> be public.
 *
 * @author  Steven B. Byrne
 */

大意如下:

默认的套接字实现方式

该实现方式不执行一些安全检查

该类非public类



该类含有如下的成员变量:

超时时间

int timeout; 

IP服务类型

private int trafficClass;

中止读取信号

private boolean shut_rd = false;

中止写入信号

private boolean shut_wr = false;

套接字输入流

private SocketInputStream socketInputStream = null;

套接字输出流

private SocketOutputStream socketOutputStream = null;

使用文件描述符的线程数

protected int fdUseCount = 0;

文件描述符控制锁

protected final Object fdLock = new Object();

文件描述符的关闭状态

protected boolean closePending = false;

连接状态指示

private int CONNECTION_NOT_RESET = 0;
private int CONNECTION_RESET_PENDING = 1;
private int CONNECTION_RESET = 2;

针对上述种类的状态记录

private int resetState;

重置锁

private final Object resetLock = new Object();

判定是TCP还是UDP(true是TCP,false是UDP;不过不是很清楚为啥要叫字段stream……)

protected boolean stream;

常量声明

public final static int SHUT_RD = 0;
public final static int SHUT_WR = 1;



该类含有如下的成员方法:

构造函数(同步的构造函数,需要运输层传送方法)

protected synchronized void create(boolean stream) throws IOException {
    this.stream = stream;
    if (!stream) {//为UDP
        ResourceManager.beforeUdpCreate();
        // only create the fd after we know we will be able to create the socket
        fd = new FileDescriptor();
        try {
            socketCreate(false);//创建UDP的Socket
        } catch (IOException ioe) {
            ResourceManager.afterUdpClose();
            fd = null;
            throw ioe;
        }
    } else {//创建TCP
        fd = new FileDescriptor();
        socketCreate(true);
    }
    if (socket != null)
        socket.setCreated();//父类包含的Socket变量
    if (serverSocket != null)
        serverSocket.setCreated();//父类包含的ServerSocket
}

创建连接(目标主机名和目的端口

protected void connect(String host, int port)
    throws UnknownHostException, IOException
{
    boolean connected = false;
    try {
        InetAddress address = InetAddress.getByName(host);//DNS获得主机地址
        this.port = port;
        this.address = address;

        connectToAddress(address, port, timeout);//创建连接
        connected = true;
    } finally {
        if (!connected) {//连接失败
            try {
                close();//关闭Socket
            } catch (IOException ioe) {
                /* Do nothing. If connect threw an exception then
                   it will be passed up the call stack */
            }
        }
    }
}

创建连接(主机地址和端口

protected void connect(InetAddress address, int port) throws IOException {
    this.port = port;
    this.address = address;

    try {
        connectToAddress(address, port, timeout);
        return;
    } catch (IOException e) {
        // everything failed
        close();
        throw e;
    }
}

创建连接(一个完成SockAddress接口的(主机地址),和连接时限)

protected void connect(SocketAddress address, int timeout)
        throws IOException {
    boolean connected = false;
    try {
        if (address == null || !(address instanceof InetSocketAddress))//不是实际地址就炸
            throw new IllegalArgumentException("unsupported address type");
        InetSocketAddress addr = (InetSocketAddress) address;
        if (addr.isUnresolved())
            throw new UnknownHostException(addr.getHostName());
        this.port = addr.getPort();
        this.address = addr.getAddress();

        connectToAddress(this.address, port, timeout);
        connected = true;
    } finally {
        if (!connected) {
            try {
                close();
            } catch (IOException ioe) {
                /* Do nothing. If connect threw an exception then
                   it will be passed up the call stack */
            }
        }
    }
}

创建连接(上面一个的进化版,多了时限

private void connectToAddress(InetAddress address, int port, int timeout) throws IOException {
    if (address.isAnyLocalAddress()) {//判定是不是本地地址
        doConnect(InetAddress.getLocalHost(), port, timeout);
    } else {
        doConnect(address, port, timeout);
    }
}

网络连接权限(根据具体的操作号,后面对应的实体种类不同),该方法只是整合参数,具体设置在SocketSetOption里

public void setOption(int opt, Object val) throws SocketException {
    if (isClosedOrPending()) {//判定当前套接字状态
        throw new SocketException("Socket Closed");
    }
    boolean on = true;
    switch (opt) {//根据操作权限码选择
        /* check type safety b4 going native.  These should never
         * fail, since only java.Socket* has access to
         * PlainSocketImpl.setOption().
         */
    case SO_LINGER:
        if (val == null || (!(val instanceof Integer) && !(val instanceof Boolean)))
            throw new SocketException("Bad parameter for option");
        if (val instanceof Boolean) {
            /* true only if disabling - enabling should be Integer */
            on = false;
        }
        break;
    case SO_TIMEOUT://设置超时时限
        if (val == null || (!(val instanceof Integer)))
            throw new SocketException("Bad parameter for SO_TIMEOUT");
        int tmp = ((Integer) val).intValue();
        if (tmp < 0)
            throw new IllegalArgumentException("timeout < 0");
        timeout = tmp;
        break;
    case IP_TOS://设置IP头控制字段(type of service
         if (val == null || !(val instanceof Integer)) {
             throw new SocketException("bad argument for IP_TOS");
         }
         trafficClass = ((Integer)val).intValue();//设置控制字段
         break;
    case SO_BINDADDR://绑定地址
        throw new SocketException("Cannot re-bind socket");
    case TCP_NODELAY://TCP 无延迟发包
        if (val == null || !(val instanceof Boolean))
            throw new SocketException("bad parameter for TCP_NODELAY");
        on = ((Boolean)val).booleanValue();
        break;
    case SO_SNDBUF:
    case SO_RCVBUF://设置发送和接收缓冲大小
        if (val == null || !(val instanceof Integer) ||
            !(((Integer)val).intValue() > 0)) {
            throw new SocketException("bad parameter for SO_SNDBUF " +
                                      "or SO_RCVBUF");
        }
        break;
    case SO_KEEPALIVE://链接保持
        if (val == null || !(val instanceof Boolean))
            throw new SocketException("bad parameter for SO_KEEPALIVE");
        on = ((Boolean)val).booleanValue();
        break;
    case SO_OOBINLINE:
        if (val == null || !(val instanceof Boolean))
            throw new SocketException("bad parameter for SO_OOBINLINE");
        on = ((Boolean)val).booleanValue();
        break;
    case SO_REUSEADDR://重定位地址
        if (val == null || !(val instanceof Boolean))
            throw new SocketException("bad parameter for SO_REUSEADDR");
        on = ((Boolean)val).booleanValue();
        break;
    default:
        throw new SocketException("unrecognized TCP option: " + opt);
    }
    socketSetOption(opt, on, val);
}

获得具体操作设置字段的值(逻辑基本和上一个方法一样

public Object getOption(int opt) throws SocketException {
    if (isClosedOrPending()) {
        throw new SocketException("Socket Closed");
    }
    if (opt == SO_TIMEOUT) {
        return new Integer(timeout);
    }
    int ret = 0;
    /*
     * The native socketGetOption() knows about 3 options.
     * The 32 bit value it returns will be interpreted according
     * to what we're asking.  A return of -1 means it understands
     * the option but its turned off.  It will raise a SocketException
     * if "opt" isn't one it understands.
     */

    switch (opt) {
    case TCP_NODELAY:
        ret = socketGetOption(opt, null);
        return Boolean.valueOf(ret != -1);
    case SO_OOBINLINE:
        ret = socketGetOption(opt, null);
        return Boolean.valueOf(ret != -1);
    case SO_LINGER:
        ret = socketGetOption(opt, null);
        return (ret == -1) ? Boolean.FALSE: (Object)(new Integer(ret));
    case SO_REUSEADDR:
        ret = socketGetOption(opt, null);
        return Boolean.valueOf(ret != -1);
    case SO_BINDADDR:
        InetAddressContainer in = new InetAddressContainer();
        ret = socketGetOption(opt, in);
        return in.addr;
    case SO_SNDBUF:
    case SO_RCVBUF:
        ret = socketGetOption(opt, null);
        return new Integer(ret);
    case IP_TOS:
        try {
            ret = socketGetOption(opt, null);
            if (ret == -1) { // ipv6 tos
                return trafficClass;
            } else {
                return ret;
            }
        } catch (SocketException se) {
            // TODO - should make better effort to read TOS or TCLASS
            return trafficClass; // ipv6 tos
        }
    case SO_KEEPALIVE:
        ret = socketGetOption(opt, null);
        return Boolean.valueOf(ret != -1);
    // should never get here
    default:
        return null;
    }
}

同步进行TCP链接

synchronized void doConnect(InetAddress address, int port, int timeout) throws IOException {
    synchronized (fdLock) {
        if (!closePending && (socket == null || !socket.isBound())) {
            NetHooks.beforeTcpConnect(fd, address, port);//建立TCP
        }
    }
    try {
        acquireFD();//获得当前套接字的描述符
        try {
            socketConnect(address, port, timeout);
            /* socket may have been closed during poll/select */
            synchronized (fdLock) {
                if (closePending) {
                    throw new SocketException ("Socket closed");
                }
            }
            // If we have a ref. to the Socket, then sets the flags
            // created, bound & connected to true.
            // This is normally done in Socket.connect() but some
            // subclasses of Socket may call impl.connect() directly!
            if (socket != null) {
                socket.setBound();
                socket.setConnected();
            }
        } finally {
            releaseFD();//归还文件描述符的使用权
        }
    } catch (IOException e) {
        close();
        throw e;
    }
}

对某个端口监听(参数是时间)

protected synchronized void listen(int count) throws IOException {
    socketListen(count);
}

接收某个连接请求(来自Scoket实例

protected void accept(SocketImpl s) throws IOException {
    acquireFD();
    try {
        socketAccept(s);
    } finally {
        releaseFD();
    }
}

获得Socket的数据输入流

protected synchronized InputStream getInputStream() throws IOException {
    synchronized (fdLock) {
        if (isClosedOrPending())
            throw new IOException("Socket Closed");
        if (shut_rd)
            throw new IOException("Socket input is shutdown");
        if (socketInputStream == null)
            socketInputStream = new SocketInputStream(this);
    }
    return socketInputStream;
}

设置数据输入流为特定输入流

void setInputStream(SocketInputStream in) {
    socketInputStream = in;
}

获得套接字输出流(就是发送给链接方的数据

protected synchronized OutputStream getOutputStream() throws IOException {
    synchronized (fdLock) {
        if (isClosedOrPending())
            throw new IOException("Socket Closed");
        if (shut_wr)
            throw new IOException("Socket output is shutdown");
        if (socketOutputStream == null)
            socketOutputStream = new SocketOutputStream(this);
    }
    return socketOutputStream;
}

设置当前的所操作的Socket(实质Socket和文件描述符绑定

void setFileDescriptor(FileDescriptor fd) {
    this.fd = fd;
}

设置目的主机地址

void setAddress(InetAddress address) {
    this.address = address;
}

设置目的端口

void setPort(int port) {
    this.port = port;
}

设置本地监听端口

void setLocalPort(int localport) {
    this.localport = localport;
}

返回当前Socket链接的有效性

protected synchronized int available() throws IOException {
    if (isClosedOrPending()) {
        throw new IOException("Stream closed.");
    }

    /*
     * If connection has been reset or shut down for input, then return 0
     * to indicate there are no buffered bytes.
     */
    if (isConnectionReset() || shut_rd) {
        return 0;
    }

    /*
     * If no bytes available and we were previously notified
     * of a connection reset then we move to the reset state.
     *
     * If are notified of a connection reset then check
     * again if there are bytes buffered on the socket.
     */
    int n = 0;
    try {
        n = socketAvailable();//当前无效
        if (n == 0 && isConnectionResetPending()) {//重新设置链接
            setConnectionReset();
        }
    } catch (ConnectionResetException exc1) {
        setConnectionResetPending();//设置成预备重设状态
        try {
            n = socketAvailable();//再次尝试获得有效性
            if (n == 0) {//如果仍然无效就再次重设
                setConnectionReset();
            }
        } catch (ConnectionResetException exc2) {
        }
    }
    return n;
}

关闭链接

protected void close() throws IOException {
    synchronized(fdLock) {
        if (fd != null) {
            if (!stream) {
                ResourceManager.afterUdpClose();
            }
            if (fdUseCount == 0) {
                if (closePending) {
                    return;
                }
                closePending = true;
                /*
                 * We close the FileDescriptor in two-steps - first the
                 * "pre-close" which closes the socket but doesn't
                 * release the underlying file descriptor. This operation
                 * may be lengthy due to untransmitted data and a long
                 * linger interval. Once the pre-close is done we do the
                 * actual socket to release the fd.
                 */
                try {
                    socketPreClose();
                } finally {
                    socketClose();
                }
                fd = null;
                return;
            } else {
                /*
                 * If a thread has acquired the fd and a close
                 * isn't pending then use a deferred close.
                 * Also decrement fdUseCount to signal the last
                 * thread that releases the fd to close it.
                 */
                if (!closePending) {
                    closePending = true;
                    fdUseCount--;
                    socketPreClose();
                }
            }
        }
    }
}

重新设置链接

void reset() throws IOException {
    if (fd != null) {
        socketClose();
    }
    fd = null;
    super.reset();
}

中止从套接字中输入数据

protected void shutdownInput() throws IOException {
  if (fd != null) {
      socketShutdown(SHUT_RD);
      if (socketInputStream != null) {
          socketInputStream.setEOF(true);
      }
      shut_rd = true;
  }
}

中止向套接字中输出数据

protected void shutdownOutput() throws IOException {
  if (fd != null) {
      socketShutdown(SHUT_WR);
      shut_wr = true;
  }
}

支持立即提交功能

protected boolean supportsUrgentData () {
    return true;
}

发送紧急数据

protected void sendUrgentData (int data) throws IOException {
    if (fd == null) {
        throw new IOException("Socket Closed");
    }
    socketSendUrgentData (data);
}

最终操作(一般是用户用完忘了关

protected void finalize() throws IOException {
    close();

}

请求文件描述符(对该套接字使用请求

FileDescriptor acquireFD() {
    synchronized (fdLock) {
        fdUseCount++;
        return fd;
    }
}

释放文件描述符(对该套接字释放

void releaseFD() {
    synchronized (fdLock) {
        fdUseCount--;
        if (fdUseCount == -1) {
            if (fd != null) {
                try {
                    socketClose();
                } catch (IOException e) {
                } finally {
                    fd = null;
                }
            }
        }
    }
}

返回状态位(是否重置链接

public boolean isConnectionReset() {
    synchronized (resetLock) {
        return (resetState == CONNECTION_RESET);
    }
}

返回状态位(是否期待重设链接

public boolean isConnectionResetPending() {
    synchronized (resetLock) {
        return (resetState == CONNECTION_RESET_PENDING);
    }
}

设置状态位(链接重置

public void setConnectionReset() {
    synchronized (resetLock) {
        resetState = CONNECTION_RESET;
    }
}

设置状态位(链接需要重置

public void setConnectionResetPending() {
    synchronized (resetLock) {
        if (resetState == CONNECTION_NOT_RESET) {
            resetState = CONNECTION_RESET_PENDING;
        }
    }

}

是否已经关闭或者期待关闭

public boolean isClosedOrPending() {
    /*
     * Lock on fdLock to ensure that we wait if a
     * close is in progress.
     */
    synchronized (fdLock) {
        if (closePending || (fd == null)) {
            return true;
        } else {
            return false;
        }
    }
}

返回超时时长

public int getTimeout() {
    return timeout;
}

预关闭套接字(不释放文件描述符和资源

private void socketPreClose() throws IOException {
    socketClose0(true);
}

关闭套接字(释放资源和描述符

protected void socketClose() throws IOException {
    socketClose0(false);
}


接下来是一些需要完成的方法,方法用途可以通过名称判断:

abstract void socketCreate(boolean isServer) throws IOException;
abstract void socketConnect(InetAddress address, int port, int timeout)
    throws IOException;
abstract void socketBind(InetAddress address, int port)
    throws IOException;
abstract void socketListen(int count)
    throws IOException;
abstract void socketAccept(SocketImpl s)
    throws IOException;
abstract int socketAvailable()
    throws IOException;
abstract void socketClose0(boolean useDeferredClose)
    throws IOException;
abstract void socketShutdown(int howto)
    throws IOException;
abstract void socketSetOption(int cmd, boolean on, Object value)
    throws SocketException;
abstract int socketGetOption(int opt, Object iaContainerObj) throws SocketException;
abstract void socketSendUrgentData(int data)
    throws IOException;




该类含有如下的静态代码块(初始化网络库的运行环境

static {
    java.security.AccessController.doPrivileged(//无视安全检查
        new java.security.PrivilegedAction<Void>() {
            public Void run() {
                System.loadLibrary("net");
                return null;
            }
        });
}



该类属于Socket的基本模版,主要为套接字定下了一个大的框架,计算机网络知识中的一些操作在这里也得到体现,如紧急提交标志位等,该类的阅读需要一定的计算机网络基础,否则可能难以准确理解实际意义。

对MixPad精灵(触屏语音开关)进行解剖分析 概述 最近有点忙,已经很久没有更新文章了,对不起各位网友啦~ 这次对ORVIBO的新产品:MixPad精灵款的来个剖析,希望对大家有所帮助! 首先,我买了一台对应的设备,直接去官网采购,价格吗还算OK,400多的价格。 拆箱的过程我就不写了,简单的上个图就行了。 一、拆包: 主屏板包装盒(顶部): 主屏板包装盒(底部): 后盖电源部分无内容,我就不拍了,给优快云空间省点存储位置。 二、设备剖析开始 接下来,我们开始对设备进行剖析,步骤如下: 1、拆掉主屏板后盖板,... 阅读详情

相关推荐

K8S 1.28.2 + Calico 3.27.3 保姆级安装避坑指南:解决节点NotReady问题

本文提供了一份详细的Kubernetes 1.28.2与Calico 3.27.3集群部署指南,重点解决节点NotReady这一常见问题。通过版本兼容性分析、精细化环境配置、kubeadm初始化参数详解及Calico Operator部署,手把手指导用户避开网络插件配置陷阱,确保集群从NotReady状态恢复健康并稳定运行。

weixin_28835583的博客 394

JDK 中的 BIO 实现原理分析(二十)

简介 对比 Linux 上网络编程,我们会发现 JDK Socket 的编程逻辑是一模一样的。实际上也 是这样,JDK 网络编程也没有做很多事,主要还是调用了 Linux 相关的函数。唯一的不同 是 Linux 是面向过程程序,socket 函数返回的是一个句柄,bind 和 listen 都是对这个句柄 的操作;而 JDK 是面向对象编程,new ServerSocket() 返回了一个对象,我们可以调用这个 serverSocket 对象的各种方法。 JDK 为我们提供了 Ser

nandao158的博客 578

Embedding理解及keras中Embedding参数详解,代码案例说明

Embedding理解 嵌入层将正整数(下标)转换为具有固定大小的向量 ------官网 词嵌入是一种语义空间到向量空间的映射,简单说就是把每个词语都转换为固定维数的向量,并且保证语义接近的两个词转化为向量后,这两个向量的相似度也高。 举例说明embedding过程: “Could have done better” 通过索引对该句子进行编码,每个单词分配一个索引,上面的句子就会变成这样: 122 8 114 12 创建嵌入矩阵,即每一个索引需要分配多少维向量,也就是说每个词需要转化为多少维

wo的博客 1万+

Struts2应用在断网的情况下启动报错: java/net/AbstractPlainSocketImpl.java:178:-1解决

错误代码: SEVERE: Exception starting filterstruts2 Unable to load configuration. -Class: java.net.AbstractPlainSocketImpl File:AbstractPlainSocketImpl.java Method: connect Line: 178 - java/net/Abstra

github yx9o Apache RocketMQ & ShardingSphere Committer 8434

双有源桥DC-DC变换器:原理、软开关与移相控制深度解析

隔离型DC-DC变换器是电力电子系统的核心部件,通过高频变压器实现电气隔离与电压匹配,保障系统安全与灵活适配。其工作原理基于功率半导体器件的开关动作,通过调制策略控制能量传输。该技术的核心价值在于实现高效、高功率密度的电能转换,并支持双向能量流动,这对于提升系统整体能效和运行灵活性至关重要。在新能源储能、电动汽车V2G及数据中心供电等场景中,双向能量流成为刚性需求,推动了如双有源桥等先进拓扑的应用。本文聚焦于双有源桥这一实现高效双向隔离变换的“明星”方案,深入剖析其利用移相控制实现软开关的机理。通过分析谐振

weixin_34195142的博客 380

KALI虚拟机挂代理教程

需要你本地挂了代理,然后通过虚拟机连接本机代理端口,不说废话了,直接说怎么做了。 1.查看选项设置中自己的小飞机的本地端口是多少:(默认是1080) 2.本机win+r打开cmd,输入ipconfig查看本地ip,我的本地ip是192.168.0.107: 2.打开kali虚拟机,编辑ProxyChains配置文件: vi /etc/proxychains.conf 3.在文件末尾的ProxyList中添加物理机本地ip和1080端口作为代理地址: 4.保存并退出即可: esc :wq 回车 5.

qq_34853514的博客 3万+

struts应用在断网下启动有异常 :java/net/AbstractPlainSocketImpl.java:184-1

如何解决无网无法启动struts2问题 :java/net/AbstractPlainSocketImpl.java:184-1 将struts.xml中的声明部分     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   "http://struts.apache.org/dtds/strut

分享我的点点滴滴,在成长路上与你同行! 2311

中科蓝讯AB536X/AB892X芯片开发避坑指南:Downloader配置中那些容易忽略的细节

本文详细解析中科蓝讯AB536X/AB892X芯片开发中Downloader配置的关键细节,包括软开关机实现、触摸灵敏度调试、量产校频等常见问题。特别针对无PR口芯片的替代方案、触摸参数优化、校频流程等易忽略环节提供实用解决方案,帮助开发者规避量产风险,提升开发效率。

weixin_30687051的博客 477

[源码解析]套接字:Socket

本篇文章是我解析Java-API的笔记,更多的是从方法着手,少对类的整体情况进行说明,故并不详尽,可供大家参考。 如果文中阐述不全或不对的,多多交流。

进步*于辰的博客 1万+

深入解析SerDes系统中的时钟数据恢复电路(CDR)——基于Cadence的PLL/Bang-Bang/PS-PI架构实现与仿真

本文深入解析SerDes系统中的时钟数据恢复电路(CDR),重点探讨基于Cadence平台的PLL、Bang-Bang和PS-PI三种架构的实现与仿真。通过详细的技术对比和工程实践案例,揭示CDR在高速串行通信中的关键作用,并提供TSMC 28nm工艺下的优化策略与故障排查经验,助力工程师应对10Gbps以上SerDes设计挑战。

weixin_29202687的博客 257

C#跨平台制图新纪元:Mapsui,一库在手,地图我有

深入学习Mapsui的渲染机制,定制属于你的地图样式,无论是颜色、图标还是文字,都可以随心所欲。

java专栏 1458

Tomcat启动报错java.net.AbstractPlainSocketImpl

Caused by: Unable to load configuration. - Class: java.net.AbstractPlainSocketImpl File: AbstractPlainSocketImpl.java Method: connect Line: 158 - java/net/AbstractPlainSocketImpl.java...

weixin_30436891的博客 688

AutoSAR MemMap模块概述及配置参数详解

这个模块是干啥的?它是用来配置Memory Mapping and Compiler Abstraction module。

4508

vdbench运行报错:java.net.NoRouteToHostException: No route to host (Host unreachable)

No route to host (Host unreachable)一般这种情况是服务器的防火墙没关,关掉服务器解决。

L123713的博客 1685

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Tomcat启动报错java.net.AbstractPlainSocketImpl(java/net/AbstractPlainSocketImpl.java:178:-1)Struts在网络复杂情...

SSH项目 在网络复杂的情况(具体规律未知)下,Tomcat启动时,报如下错误: [ERROR] 2014-08-12 14:52:58,484 [org.apache.struts2.dispatcher.Dispatcher :27] - Dispatcher initialization failedUnable to load configuration. - Class: java....

weixin_30580943的博客 235

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【转载】struts应用在断网情况下启动报错解决办法(java/net/AbstractPlainSocketImpl.java:178:-1)...

无意间struts应用在有网络的情况下启动正常,在断网的情况下启动报错,报错代码如下图所示: SEVERE: Exception starting filter struts2 Class: java.net.AbstractPlainSocketImpl File: AbstractPlainSocketImpl.java Method: connect Line: 17...

aed97713的博客 308

tomcat shutdown.sh结束不了,Could not contact localhost:8005

使用./shutdown.sh关闭Tomcat,有时会关闭成功,有时会出现关闭错误; Jul 06, 2017 10:57:37 AM org.apache.catalina.startup.Catalina stopServer  SEVERE: Could not contact localhost:8005. Tomcat may not be running.  Jul 06, 2017...

StriverChuiYing的博客 949

【无标题】

数据库是开发过程中最常用的组件,然而我们经常会遇到各种各样的超时异常,如: connect timeout:建立数据库连接超时 socket timeout:socket读取超时 statement timeout:单个sql执行超时 transaction timeout:事务执行超时,一个事务中可能包含多个sql get connection timeout:从连接池中获取链接超时 读完此文,你将彻底掌握各种超时产生的根本原因,以及对应的解决方案。 1 connectTim

花飘万家雪 619

java cpu io高_一次java进程cpu高的处理

首先top看一下那个java进程高,机器上有很多java进程举个例子 pid是 2507ps -mp pid -o THREAD,tid,timeps -mp 2507-o THREAD,tid,time查看那个线程占用的cpu高例如 12830top -p 2507 -H再次确认一下转为16进制printf "%x\n" 12830321ekill -3 2507jstack 2507 |g...

weixin_32085599的博客 242

记录Unable to load configuration. - Class: java.net.AbstractPlainSocketImpl File: AbstractPlainSocketI

记录Unable to load configuration. - Class: java.net.AbstractPlainSocketImpl File: AbstractPlainSocketImp 没有在本地形成struts-2.3.dtd文件,所以只有在联网情况下通过http://struts.apache.org/dtds/struts-2.3.dtd去找。把它改为2.1的就可以在联网...

weixin_43625204的博客 551

【Bug笔记】Unable to load configuration. - Class: java.net.AbstractPlainSocketImpl

最近出了一件怪事,在联网状态下启动Tomcat和没有联网状态下启动Tomcat会出现两种不同的结果:正常启动和报错 于是自己纠结了半天,查找原因是struts.xml中配置的声明方式,我用的jar是struts-2.1.8.jar,而我引用的是2.3的(这个声明方式在互联网上拷贝的,因为参考的是互联网的一些代码例子,往往这里就出错了),它没有在本地形成struts-2.3.dtd文件,所以只有在

Coder的不平凡 4595

Java代理请求发送失败_发送post请求失败

Caused by: java.net.ConnectException: 拒绝连接 (Connection refused)at java.net.PlainSocketImpl.socketConnect(Native Method)at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)at...

weixin_42509868的博客 658

(已完成)java socket-PlainSocketImpl 源码分析.md

找不到实现类? 单步调试 找不到实现类? class PlainSocketImpl extends AbstractPlainSocketImpl { private AbstractPlainSocketImpl impl; //这个实现类是啥?都是PlainSocketImpl void socketCreate(boolean isServer) throws IOExceptio...

weixin_34351321的博客 496

linux操作系统设置timeout值,linux上TCP connection timeout问题解决办法

linux上TCP connection timeout问题解决办法最近在产线上经常出现connection timeout的问题,先看看java 中关于connection timeout 的异常如何产生JAVA中的timeoutjava.net.SocketTimeoutException: connect timed out客户端异常:connect timed outat java.net...

weixin_36255517的博客 1373

java.net.UnknownHostException: api.weixin.qq.com解决办法

java.net.UnknownHostException: api.weixin.qq.com at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:175) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384) at java.

思考的蜗牛 5万+
上一篇: Java 日看一类(60)之net包中的AbstractPlainDatagramSocketImpl类
下一篇: Java 日看一类(62)之net包中的Authenticator类
wyf95278
博客等级 码龄10年 38粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值