-1

我正在尝试编写一个小程序来打开一个到我的世界服务器的套接字,这样我就可以通过它的远程控制台与之交互。

我了解了如何使用 Java 套接字的基础知识,但我无法找到一种简单的方法来让套接字在我工作时保持在后台运行,例如从控制台获取用户输入或读取配置文件。

我看过的一些示例涉及使用线程并创建网络线程只是为了保持套接字连接到服务器。

当我试图让一个线程工作时,程序会运行,但它会立即切换到线程 1(我创建的那个),然后它不会打印我的测试行,因为线程 0 已暂停,被告知等待。

这个问题我真的不完全理解线程,所以我对此有点茫然。但我想不出办法让事情变得简单。有任何想法吗?

这是我到目前为止所做的代码,虽然不多,但也许会有所帮助。

package com.solignis.rcon;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;

public class Connection extends Thread {

    private InetSocketAddress serverAddress;
    private int timeout;

    private Socket socket;

    public Connection(String par1, int par2) {
        serverAddress = new InetSocketAddress(par1, par2);
    }

    @Override
    public void run() {
        socket = new Socket();

        try {
            socket.connect(serverAddress, timeout);
        } catch (IOException e) {
            e.printStackTrace();
        }

        while(socket.isConnected()) {

        }
    }

    public void connect() {
        this.run();
        try {
            this.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Connecting to " + serverAddress.toString());

        if(socket.isConnected()){
            System.out.println("Connection established");
        }else{
            System.out.println("Connection failed");
        }
    }

    public void disconnect() {
        this.notify();

        try {
            socket.close();
        } catch (IOException ie) {
            ie.printStackTrace();
        }
    }
}
4

1 回答 1

0

由于run方法结束,没有引用客户端socket,socket会被关闭。我建议你启动一个线程继续写流到服务器,另一个线程继续从服务器读取流。​​代码如下:

class ReadThread extends Thread {

    private Socket s ;

    public ReadThread (Socket s) {
        this.s = s;
    }

    public void run() {
        try {
            while (true) {
                InputStream is = s.getInputStream();
                //read stream from the server
            }
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }


class WriteThread extends Thread {
     //Like the read thread,keep a while(true) loop writing to the server
}


main(){
    Socket s=new Socket(host,pot);
    new WriteThread(s).start();
    new ReadThread(s).start();
}
于 2013-11-08T09:54:45.557 回答