简单java聊天服务器?

简单java聊天服务器?,java,Java,我用java创建了一个带有GUI的简单聊天服务器,并在创建一个客户端之前对其进行了测试 telnet本地主机8888。 它已连接,但只要我在cmd中键入任何内容,连接就会结束? 以下是服务器代码: 套餐聊天应用 import java.io.*; import java.net.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ChatServer extends JFrame{

我用java创建了一个带有GUI的简单聊天服务器,并在创建一个客户端之前对其进行了测试 telnet本地主机8888。 它已连接,但只要我在cmd中键入任何内容,连接就会结束? 以下是服务器代码: 套餐聊天应用

import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ChatServer extends JFrame{

private JTextField userText;
private final JTextArea chatWindow;
private ObjectOutputStream output;
private ObjectInputStream input;
private ServerSocket server;
private Socket connection;

public ChatServer(){
    super("Chat messenger");
    userText = new JTextField();
    userText.setEditable(false);
    userText.addActionListener(
        new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent event){
                sendMessage(event.getActionCommand());
                userText.setText("");
            }
        }
    );
    add(userText, BorderLayout.NORTH);
    chatWindow = new JTextArea();
    add(new JScrollPane(chatWindow));
    setSize(300,150);
    setVisible(true);

}
// setting up server
public void startRunning(){
    try{
        server = new ServerSocket(8888, 32);
        // if 8888 doesn't work try 6789
        // 32 is backlog- how people can speak
        while(true){
            // run forever
            try{
                waitForConnection();
                setupStreams();
                whileChatting();
            }catch(EOFException eofException){
                showMessage("\n Server ended the connection");
            }finally{
                closeSocket();
            }
        }
    }catch(IOException ioException){
        System.out.println("Error, Oh no!");
    }
}
private void waitForConnection() throws IOException{
    showMessage("Waiting for a connection...\n");
    connection = server.accept();
    showMessage("Connected to " 
            + connection.getInetAddress().getHostName()+ " so you can start talking now!");


}
private void setupStreams() throws IOException{
    output = new ObjectOutputStream(connection.getOutputStream());
    output.flush();
    input = new ObjectInputStream(connection.getInputStream());
    showMessage("\n Streams are set up. \n");

}
private void whileChatting() throws IOException{
    String message = "Connected ";
    sendMessage(message);
    ableToType(true);
    do{
        try{
            message = (String) input.readObject();
            showMessage("\n" + message);
        }catch(ClassNotFoundException classNotFoundException){
            showMessage("\n error");

        }
    }while(!message.equals("CLIENT - END"));
    // if user types end program terminates
}
private void closeSocket(){
    // close streams, sockets when done.
    showMessage("\n Closing connections... \n");
    ableToType(false);
    try{
        output.close();
        input.close();
        connection.close();
    }catch(IOException ioException){
        System.out.println("Error");
    }
}
private void sendMessage(String message){
    // sends message to client
    try{
        output.writeObject("SERVER - " + message);
        output.flush();
        showMessage("\n SERVER - " + message);
    }catch(IOException ioException){
        chatWindow.append("\n ERROR: dont do that okay! \n");


    }
}
private void showMessage(final String text){
   // updates chat window
    SwingUtilities.invokeLater(
            new Runnable(){
                @Override
                public void run(){
                    chatWindow.append(text);

                }
            }
    );
}
private void ableToType(final boolean tr_or_flse){
    SwingUtilities.invokeLater(
           new Runnable(){
               @Override
               public void run(){

               }


           }   
    );       
}            
}

这是一个包含主要方法的类:

package chat.application;
import javax.swing.JFrame;

public class ServerTest {
public static void main(String[] args){
    ChatServer the_server = new ChatServer();
    the_server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    the_server.startRunning();

}
}

顺便说一句,我在同一台计算机上运行telnet和服务器,idk,如果这影响它的话

您正在尝试使用and读取/写入字符串。他们使用一种特殊的协议对对象进行解码/编码,而仅仅使用telnet客户端发送字符串是行不通的。我假设您的
input.readObject()调用引发异常


如果您想使用telnet客户端,请考虑使用和读取/写入字符串。

请进行调试并发布将编译的最小相关代码段。