java - 服务器不监听请求

标签 java multithreading sockets

作为我作业的一部分,我必须构建两个类,一个是监听器,另一个是向服务器发出请求(服务器已经由我的老师编写,我不知道代码是什么样的)。理论上:我连接的服务器应该回复与我发送给他的请求完全相同的请求。但实际上我什么也没得到。

public class Listenerthread extends Thread {
    Socket s;
    Scanner answerServer;

    public Listenerthread(Socket socket) {
        this.s = socket;
        this.answerServer = new Scanner(new BufferedReader(new InputStreamReader(s.getInputStream())));
    }

    public void run() {
        System.out.println("Listening to the responses from the server......");
        while (true) {
            if (answerServer.hasNext()) {
                System.out.println(answerServer.nextLine());
            }
        }
    }
}
public class Mainthread {
    public static void main(String[] args) throws ParseException {
        Socket s = new Socket("someServer", 9999);
        Listenerthread server = new Listenerthread(s);
        server.start();
        if (s.isConnected()) {
            System.out.println("Connected");
        }
        String req = "Heyyy mate";  // server should sent me this back
        PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
        pw.println(req);
        pw.flush();
        //pw.close();
        //s.close(); 
    }
}

最佳答案

更新:在我开始写这个答案后,OP 在这个问题上留下的评论表明,OP 实际上不需要处理通信的服务器端。我暂时保留这个答案,以防它仍然有用。

<小时/>

当您有客户端/服务器模型时,您应该在服务器端使用ServerSocket,正如您在问题中提到的那样,但在您的代码中似乎没有这样做。

ServerSocket

这里有一个 ServerSocket 示例,可以解决这个问题。

ServerSocket serverSocket;

public void serverSocketTest()
{
    serverSocket = new ServerSocket(9999);
    // each of the below methods will happen on separate threads
    new Thread(this::serverSideAcceptConnectionFromClient).start();
    new Thread(this::clientSideConnectToServer).start();
}

public void clientSideConnectToServer()
{
    try {
        System.out.println("Client is trying to connect to server...");
        Socket connectionToServer = new Socket("localhost", 9999);
        OutputStream thisGoesToTheServer = connectionToServer.getOutputStream();
        InputStream thisIsDataComingFromServer = connectionToServer.getInputStream();
        System.out.println("Client successfully connected to server.");
    } catch(IOException ex) {
        System.out.println("Connection to server failed. (" + ex + ")");
    }
}

public void serverSideAcceptConnectionFromClient()
{
    try {
        System.out.println("Server is listening for potential clients...");
        Socket connectionFromClient = serverSocket.accept();
        InputStream thisIsDataComingFromClient = connectionFromClient.getInputStream();
        OutputStream thisIsGoesBackOutToClient = connectionFromClient.getOutputStream();
        System.out.println("Server accepted a client");
    } catch(IOException ex) {
        System.out.println("Error while listening for clients. (" + ex + ")");
    }
}

关于java - 服务器不监听请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55938743/

相关文章:

java - Java String 方法存在概念错误

Java 用一个参数比较对象

java - 使用 Jersey Apache Client 4 的多线程连接管理器

java - 是否可以中断 ExecutorService 的特定线程?

java - "Connected"UDP套接字接收ICMP端口不可达

node.js - Socket.IO 与 HapiJS 的连接

java - 身份验证后如何显示用户特定数据

java - 覆盖 JApplet 中的绘制方法

java - 在线程 0 中运行 JFrame

java - 文件传输-Java套接字编程