Никак не могу понять в чем дело. Пересмотрел кучу всего на эту тему, но мало чего помогло. Ошибка звучит так: [DEBUG] 2018-11-03 23:48:06.222 [main] TCP - В соединении отказано (Connection refused). Вот кусок кода, выдающий данную ошибку:
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import org.apache.logging.log4j.*;
public class TCP {
private static int number_of_socket = 6666;
public static void main(String[] args) {
Logger log = LogManager.getLogger(TCP.class.getName());
try {
InetAddress ipAddress = InetAddress.getByName("localhost");
try (Socket socket = new Socket(ipAddress, number_of_socket)) {
Client cl = new Client("Vasya", socket);
Server sever = new Server(socket);
} catch (IOException ex) {
log.debug(ex.getLocalizedMessage());
}
}catch (UnknownHostException ex) {
log.debug(ex.getCause());
}
}
}
И так для любого свободного порта, который я выбираю. Код сервера, клиента, и вспомогательного класса-обертки: Сервер:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.LinkedList;
import org.apache.logging.log4j.*;
public class Server extends Thread{
private ServerSocket serverSocket;
private LinkedList<MyWrapper> wrap;
private Logger log = LogManager.getLogger(Server.class.getName());
public Server (Socket socket){
try {
wrap = new LinkedList<MyWrapper>();
serverSocket = new ServerSocket(6666);
start();
}catch(IOException ex){
log.debug(ex.getMessage());
}
}
@Override
public void run(){
while (true){
try {
try {
Socket sc = serverSocket.accept();
wrap.add(new MyWrapper(sc, wrap));
} catch (IOException ex) {
log.debug(ex.getMessage());
} finally {
serverSocket.close();
}
}catch (IOException ex){
log.debug(ex.getMessage());
}
}
}
}
Клиент:
import java.io.*;
import java.net.Socket;
import org.apache.logging.log4j.*;
public class Client extends Thread {
private String name;
private Socket socket;
private PrintWriter out;
private BufferedReader in;
private Logger log = LogManager.getLogger(Client.class.getName());
public Client(String name, Socket socket){
this.name = name;
try {
this.socket = socket;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
}catch (IOException ex){
log.debug(ex.getMessage());
}
start();
}
@Override
public synchronized void run(){
Read_Client read_client = new Read_Client(in);
Write_Client write_client = new Write_Client(out, name);
}
}
Обертка:
import java.io.*;
import java.net.Socket;
import java.util.LinkedList;
import org.apache.logging.log4j.*;
public class MyWrapper extends Thread {
private BufferedReader in;
private PrintWriter out;
private String name;
private Socket mySocket;
private LinkedList<MyWrapper> chatMembers;
private Logger log = LogManager.getLogger(Server.class.getName());
public MyWrapper (Socket socket , LinkedList<MyWrapper> wrap) throws IOException{
name = "noname";
mySocket = socket;
chatMembers = wrap;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
start();
}
@Override
public void run(){
while (true){
try {
String message = in.readLine();
if (message.equals("@quit")){
for (MyWrapper mr : chatMembers){
if (!mr.name.equals(this.name))
mr.write(name + "has gone");
else mr.write("@quit");
}
break;
}
if (message.substring(0,9).equals("@senduser ")){
String receiver_name = message.substring(10);
for (MyWrapper mr : chatMembers) {
if (mr.name.equals(receiver_name))
mr.write(name + ": " + message);
}
}
if (message.charAt(0) == '@' && name.equals("noname")){
name = name = message.substring(1);
}else if (message.charAt(0) != '@'){
for (MyWrapper mr : chatMembers) {
mr.write(name + ": " + message);
}
}
}catch(IOException ex){
log.debug(ex.getMessage());
}
}
}
private void write(String message) throws IOException{
out.write(message);
}
}
Ну и stacktrace наконец:
java.net.ConnectException: В соединении отказано (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
at java.base/java.net.Socket.connect(Socket.java:591)
at java.base/java.net.Socket.connect(Socket.java:540)
at java.base/java.net.Socket.<init>(Socket.java:436)
at java.base/java.net.Socket.<init>(Socket.java:213)
at tcp.TCP.main(TCP.java:21)
К сожалению, Ваш вопрос не содержит необходимой для ответа информации. Огромная просьба приложить код классов Client и Server. Без этого кода непонятно, как реализовано соединение. Но если предположить, что в сервере используется метод ServerSocket.accept, а в клиенте Socket.connect, то следовало бы для начала инициализировать сервер, прослушивающий соединения, а уже после клиент, который к этому самому серверу и подключится.
Более правильный код будет выглядеть так:
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Logging;
public class TCP {
private static int number_of_socket = 6666;
public static void main(String[] args) {
Logger log = Logger.getLogger(TCP.class.getName());
try {
InetAddress ipAddress = InetAddress.getLocalHost();
try (Socket socket = new Socket(ipAddress, number_of_socket)) {
Server sever = new Server(socket);
Client cl = new Client("Vasya", socket);
} catch (IOException ex) {
log.fatal("Ошибка соединения!", ex);
}
} catch (UnknownHostException ex) {
log.fatal("Невозможно обнаружить хост.", ex);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
В своем андроид приложении для загрузки изображений(gif) использую glide
нужна помощь, нужно удалить полностью тег при загрузки станицы, пример такой, необходимо удалить <section class="page4"> из станицы,
На данный вопрос уже ответили: