在Java中接收套接字错误

时间:2014-07-25 22:13:44

标签: java multithreading sockets proxy

我在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服务器的错误回复

拒绝连接:连接

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

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

连接重置

连接超时

提前致谢,如果有什么不清楚的地方,请在评论中说明一下!

1 个答案:

答案 0 :(得分:0)

  

套接字已关闭

您已关闭套接字并继续使用它。

  

来自SOCKS服务器的错误回复

您连接到可能不是SOCKS服务器的东西。

  

拒绝连接

目标IP上没有任何内容:端口

  

套接字未连接

您没有连接套接字。

  

连接重置

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

  

连接超时

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

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