- 332
- 4
Пусть эсть два компьютера, один выполняет роль сервера. При подключении к серверу по Ip у другого компьютера вылетает NullPointerException. Вот код клиента:
А вот код сервера:
При том, как я понял, output - null, однако если вставить вместо собственного порта его замену - 127.0.0.1 всё работает(если сервер и клиент - один компьютер). Кому не лень проше помочь.
И имеет ли это отношение к тому что я использую ObjectStream's (вместо BufferedStream)?
Код:
package client;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Client extends JFrame implements Runnable {
public static ObjectOutputStream output;
public static ObjectInputStream input;
public static Socket connection;
public static void main(String[] args) {
new Thread(new Client()).start();
}
public Client() {
super("Test");
setSize(500, 500);
setLocationRelativeTo(null);
setLayout(new FlowLayout());
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton b1 = new JButton("Write");
JTextField t1 = new JTextField(10);
add(b1);
add(t1);
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b1){
sentData(new String(t1.getText()));
}
}
});
}
//176.98.146.81
@Override
public void run() {
while(true) {
try {
connection = new Socket(InetAddress.getByName("176.98.146.81"), 36850);
output = new ObjectOutputStream(connection.getOutputStream());
input = new ObjectInputStream(connection.getInputStream());
JOptionPane.showMessageDialog(null, input.readObject());
} catch (IOException ex) {
System.out.println("Error 0");
} catch (ClassNotFoundException ex) {
System.out.println("Error 4");
}
}
}
public static void sentData( Object obj ) {
try {
output.flush();
output.writeObject(obj);
} catch (IOException ex) {
System.out.println("Error 1");
}
}
}
А вот код сервера:
Код:
package server;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
public class Server extends JFrame implements Runnable {
public static ObjectOutputStream output;
public static ObjectInputStream input;
public static Socket connection;
public static ServerSocket server;
//public static ArrayList<String> o = new ArrayList<>();
public static JLabel l1;
public static void main(String[ ] args) {
new Thread(new Server()).start();
}
public Server() {
super("Server");
setSize(300, 300);
setLocationRelativeTo(null);
setLayout(new FlowLayout());
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
l1 = new JLabel();
add(l1);
}
@Override
public void run() {
try {
server = new ServerSocket(36850, 10);
while(true) {
connection = server.accept();
output = new ObjectOutputStream(connection.getOutputStream());
input = new ObjectInputStream(connection.getInputStream());
String s = input.readObject() + "JAVA";
output.writeObject(s);
//
}
} catch (IOException ex) {
System.out.println("Error 2");
} catch (ClassNotFoundException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
При том, как я понял, output - null, однако если вставить вместо собственного порта его замену - 127.0.0.1 всё работает(если сервер и клиент - один компьютер). Кому не лень проше помочь.
И имеет ли это отношение к тому что я использую ObjectStream's (вместо BufferedStream)?