Проблемы с сокетами

332
4
Пусть эсть два компьютера, один выполняет роль сервера. При подключении к серверу по Ip у другого компьютера вылетает NullPointerException. Вот код клиента:

Код:
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)?
 
всё крч, исправил, всем спасибо.


ну оч дибильная проблема - Ip роутера вписал(впрочем это и предлагается на многих сайтах сделать) а надо Ip компьютера.
 
Назад
Сверху