在Java中接收套接字错误
我在Java中收到套接字错误,它每次都用不同的代理连接到套接字,并返回一个错误,我检查了代理,所以它们没有死。我不确定这是什么原因造成的 以下是主要功能在Java中接收套接字错误,java,multithreading,sockets,proxy,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]); InetSocketAddres
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.proxiedSocketthis.chatcon,this.proxy
这些是我犯的错误
从服务器读取时出错:套接字已关闭
来自SOCKS服务器的错误回复
连接被拒绝:连接
向服务器发送数据时出错:套接字未连接
从服务器读取时出错:套接字未连接
连接重置
连接超时
提前感谢,如果有不清楚的地方,请在评论中注明
插座已关闭
您关闭了插座并继续使用它
来自SOCKS服务器的错误回复
您连接的可能不是SOCKS服务器
拒绝连接
目标IP:端口上没有侦听内容
插座未连接
你没有连接插座
连接重置
造成这种情况的原因很多,但最常见的是将数据发送到已被对等方关闭的连接。换句话说,应用程序协议错误
连接超时
可能是防火墙阻止您连接到目标
其中几个错误的原因是您正在接受异常并返回套接字。不要这样写代码。让调用方处理异常。不要返回不可用的套接字。因此,与其在返回套接字的函数中执行try catch,不如执行try{call to function}catch?我不明白“让调用方处理异常”可能意味着什么。在某些情况下,在您退出此代码之前,套接字已经被终止。例如,连接超时:套接字未连接,您关闭了它,但仍然返回它。。。如果我只使用工作的,它们肯定不会全都死。。它一定是因为代码中的错误而被杀死了,因为我在读取/发送后打印状态,它说它是活动的。。。