繁体   English   中英

接收Java中的套接字错误

[英]Receiving Socket Errors in Java

我收到了Java中的套接字错误,它每次都使用不同的代理连接到套接字,并且返回错误,我检查了代理以确保它们没有失效。 我不确定是什么原因造成的。

这是主要功能。

public static Socket proxiedSocket(String[] con, String[] Prox)
{
    int port = Integer.parseInt(Prox[1]);
    int chatport = Integer.parseInt(con[1]);
    InetSocketAddress SOCKS = new InetSocketAddress(Prox[0], port);
    Proxy proxy = new Proxy(Proxy.Type.SOCKS, SOCKS);
    Socket socket = new Socket(proxy);
    InetSocketAddress inet = new InetSocketAddress(con[0], chatport);
    try
    {
        socket.connect(inet, 7000); // 5 Second Timeout
    }
    catch(SocketTimeoutException e)
    {
        log("Could not connect connect to socket! Reason: timed out!");
        try
        {
            socket.close();
        }
        catch(Exception ee) { log("Could not close socket!"); }
    }
    catch(IOException e)
    {
        log(e.getMessage());
        return socket;
    }
    return socket;
}

public static void send(Socket socket, String data)
{
    try
    {
        DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());

        // Send first message
        dOut.writeByte(1);
        dOut.writeUTF(data);
        dOut.flush(); // Send off the data

        // Send the exit message
        dOut.writeByte(EOF);
        dOut.flush();
        dOut.close();
    }
    catch (Exception e)
    {
        log("Error sending data to server: " + e.getMessage());
    }
}

public static String read(Socket socket)
{
    try
    {
        int b;
        ByteArrayOutputStream ba = new ByteArrayOutputStream(200);
        InputStream reader = socket.getInputStream();
        String packet = "";
        while((b = reader.read()) > 0)
        {
            ba.write(b);
        }
        if(b == -1)
        {
            ba.close();
            return "False";
        }
        packet = ba.toString("UTF-8");
        ba.flush();
        ba.close();
        return packet;
    }
    catch(Exception e)
    {
        log("Error while reading from server: " + e.getMessage());
        return "False"; 
    }
}

顺便说一下,这是多线程。

因此,在每个线程调用此代码之后:Socket socket = core.proxiedSocket(this.chatcon,this.proxy);

这些是我得到的错误。


从服务器读取时出错:套接字已关闭

来自SOCKS服务器的格式错误的回复

连接被拒绝:连接

向服务器发送数据时出错:未连接套接字

从服务器读取时出错:未连接套接字

连接重置

连接超时

在此先感谢,如果不清楚,请在评论中说出来!

插座已关闭

您关闭了插座并继续使用它。

来自SOCKS服务器的格式错误的回复

您已连接到可能不是SOCKS服务器的设备。

拒绝连接

目标IP:端口没有监听

插座未连接

您没有连接插座。

连接重置

造成这种情况的原因很多,但最常见的是将数据发送到已被对等方关闭的连接。 换句话说,应用程序协议错误。

连接超时

可能是防火墙阻止了您连接到目标。

这些错误中的一些错误的原因是您吞下了异常并无论如何都返回了套接字。 不要写这样的代码。 让调用者处理异常。 不要返回不可用的套接字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM