I'm trying to create a chat program. But I have some problems. Here is my server and client classes:
and client:
I can connect. Messages show that client connected, server messages show that too. But when I want to initialize ObjectStreams in client class, the program stops. I don't know why. What's wrong?
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
public class Server {
public int port;
public ServerSocket server;
public ArrayList<Client> connectedUsers;
public boolean keep;
public Server ( int port ) {
this.port = port;
openConnection();
}
private void openConnection() {
// Creating server
try {
server = new ServerSocket(port);
JOptionPane.showMessageDialog(null, "Server created!");
connectedUsers = new ArrayList<Client>();
keep = true;
// Accepting clients
while(keep) {
display("Waiting for connection...");
Socket user = server.accept();
display("Someone connected.");
Client c = new Client(user);
connectedUsers.add(c);
c.start();
}
// Closing everything at the end
try {
server.close();
for(int i = 0; i<connectedUsers.size(); i++){
Client tc = connectedUsers.get(i);
try {
}catch(Exception e){}
}
}catch(Exception e){
display("Exception closing the server " + e);
}
} catch (IOException e) {
display("Can't create server");
e.printStackTrace();
}
}
//Message displayer
private void display(String message){
JOptionPane.showMessageDialog(null, message);
}
public static void main(String[] args) {
String port = JOptionPane.showInputDialog("Enter port number");
int portNumber = Integer.parseInt(port);
Server server = new Server(portNumber);
}
// Inner class for each user
private class Client extends Thread{
public Socket socket;
public ObjectInputStream sInput;
public ObjectOutputStream sOutput;
public String username;
public Client (Socket s) {
socket = s;
try{
sInput = new ObjectInputStream(socket.getInputStream());
sOutput = new ObjectOutputStream(socket.getOutputStream());
username = (String) sInput.readObject();
display(username+" has connected");
}catch(Exception e){}
}
}
}
and client:
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Client {
public String nickname;
public String server;
public int port;
public Socket socket;
public ObjectInputStream sInput;
public ObjectOutputStream sOutput;
public JFrame frame;
public ClientGUI gui;
public Client () {
nickname = JOptionPane.showInputDialog("Choose a nickname");
server = JOptionPane.showInputDialog("Enter the server name you want to connect");
port = Integer.parseInt(JOptionPane.showInputDialog("Enter port"));
try{
socket = new Socket(server, port);
JOptionPane.showMessageDialog(null, "Successfully connected to the server");
try {
sInput = new ObjectInputStream(socket.getInputStream());
sOutput = new ObjectOutputStream(socket.getOutputStream());
}catch (IOException eIO) {
eIO.printStackTrace();
}
JOptionPane.showMessageDialog(null, "Successfully created IO part");
}catch(Exception e){
e.printStackTrace();
JOptionPane.showMessageDialog(null, "Can't connect to the server");
}
setFrame();
}
private void setFrame() {
frame = new JFrame(nickname + " - Chatter v1.0");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui = new ClientGUI();
frame.add(gui);
frame.setSize(600,400);
frame.setVisible(true);
}
public static void main(String[] args) {
Client client = new Client();
}
}
I can connect. Messages show that client connected, server messages show that too. But when I want to initialize ObjectStreams in client class, the program stops. I don't know why. What's wrong?