Java套接字服务器未接收消息?

Java套接字服务器未接收消息?,java,sockets,protocols,listener,Java,Sockets,Protocols,Listener,好的,所以我不确定是否真的有错误。 我已经使用Java和NetBeans创建了一个侦听服务器,并且正在尝试让协议正常工作。 但是,出于某种原因,它不想接受传入的消息。 它将接受传入连接并设置用于处理客户端的对象,但不会接收任何消息 我不知道发生了什么,我做错什么了吗?另外,我已经转发了7777端口,我正在使用“127.0.0.1”进行测试 ====================================================================== 我目前有3门课:

好的,所以我不确定是否真的有错误。 我已经使用Java和NetBeans创建了一个侦听服务器,并且正在尝试让协议正常工作。 但是,出于某种原因,它不想接受传入的消息。 它将接受传入连接并设置用于处理客户端的对象,但不会接收任何消息

我不知道发生了什么,我做错什么了吗?另外,我已经转发了7777端口,我正在使用“127.0.0.1”进行测试

======================================================================

我目前有3门课:

主类GMServer:

public class GMServer {
public static void main(String[] args) throws IOException {
    CreateListener createListener = new CreateListener("USA Server East",7777,500);
    }
}
======================================================================

CreateListener类:

public final class CreateListener {
private ServerSocket listenSocket = null;
private String serverName = "";
private int serverPort = 7777;
private int serverMax = 500;
private boolean terminate = false;
private double connectID = 0;
private String currentUser = "-1";
private listenParser[] connections;
private int listenArray = 0;
public listenParser[] users;
public int usercount;
private boolean listenerConnected = true;

public double getCID() {
    this.connectID++;
    return this.connectID;
    }

public CreateListener(String sName, int sPort, int sMax) throws IOException {
    //Set the server name, port, and max users.

    this.serverName = sName; this.serverPort = sPort; this.serverMax = sMax;

    //Try to create a listener socket.
    try { this.listenSocket = new ServerSocket(this.serverPort); } //If not successful, output error and end program.
    catch (IOException e) { System.err.println("Could not create a listening server on port "+this.serverPort); System.exit(7777); }

    //Let the console know that the listening server was created successfully.
    System.out.println("Creating Server: \""+serverName+"\" On Port "+serverPort+"...");

    while(listenerConnected) {
        try {
            Socket accepted = this.listenSocket.accept();
            new listenParser(accepted,getCID(),sMax).start();
            } catch (IOException e) {
            //Socket Wasn't Accepted?
            }
        }

    //Close down server after anything should cause the constant loop to end.
    listenSocket.close();
    }
}
======================================================================

然后是listenParser类(它应该在其中处理来自客户端的所有流量):


你在读台词。你在发短信吗?非常常见的错误
readLine()
将一直阻塞,直到收到换行符或EOS


说到EOS,您必须对
readLine()
的结果做的第一件事是检查它是否为null,如果是,请关闭套接字并中断读取循环。

guess,您需要提供一个客户端代码和来自服务器和客户端的示例日志。我建议您使用一些
print
语句插入代码,以查看发生了什么,或者使用调试器。
public class listenParser extends Thread {
public Socket[] global_sockets;
public int connections = 0;
private PrintWriter _out = null;
private BufferedReader _in = null;
private double cid = 0;
private Socket socket = null;
private String currentUser = "";
private int timeout = 0;
private boolean connectionOpen = true;
private int socketTimeout = 0;
private int socketTimeoutMax = 1000;

private String room = "";
private long x = 0;
private long y = 0;

public listenParser(Socket sock, double acID, int maxUsers) {
    super("listenParser");
    this.socket = sock;
    System.out.println("Connected To A Client...");
    }

public String readString(BufferedReader tmpBuffer) {
    try {
        return tmpBuffer.readLine();
        } catch (IOException e) {
        return "";
        }
    }

public String protocol(String arg) {
    String RETURN = "";
    switch(arg) {
        case "login": currentUser = "1"; break;
        case "echo": this._out.println(readString(this._in)); break;
        default: /*Do Nothing*/ break;
        }

    //Only allow access to these commands if the user is logged in.
    if (currentUser!="") {
        switch(arg) {
            default: break;
            }
        }
    return RETURN;
    }

public boolean good() {
    if (this.currentUser.equals("")) {
        return false;
        }
    return true;
    }

@Override
public void run() {
    try {
        _out = new PrintWriter(socket.getOutputStream(),true);
        _in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        connections++; if (connections>500) { connectionOpen = false; }

        while(connectionOpen) {
            try {
                String arguments, reply;

                arguments = this._in.readLine();

                reply = protocol(arguments);

                socketTimeout = 0;
                } catch (IOException e) {
                socketTimeout++;
                if (socketTimeout>socketTimeoutMax) {
                    connectionOpen = false; break;
                    }
                }
            }

        _out.close();
        _in.close();
        socket.close();

        System.out.println("Client Disconnected...");
        } catch (IOException e) {
        e.printStackTrace();
        }
    }
}