java - 通过线程将变量从客户端发送到服务器

标签 java

我制作了一个调用 connect() 的按钮;然后 (new Thread(new client())).start();

我希望我的类客户端做的是通过 run 方法不断将变量“iterationCounter”发送到服务器类。变量 iterationCounter 正在改变值,然后由服务器打印出来。在评论的帮助下,客户端现在可以工作了。

public class client implements Runnable
{
public static int iterationCounter = 0;

private PrintStream p;

public static void serverConnect(int globalCount) throws UnknownHostException, IOException 
{
    iterationCounter = globalCount;
}

public void connect() throws UnknownHostException, IOException
{       
    Scanner sc = new Scanner(System.in); 
    Socket s = new Socket("127.0.0.1",1342); 

    p = new PrintStream(s.getOutputStream()); 
    //p.println(iterationCounter);
}

@Override 
public void run() {
    while(true)
    {       
        if (p != null) // Make sure that p has been initialized 
          p.println(iterationCounter);  // p will be resolved now
        //System.out.println("Iteration: "+ iterationCounter); // WORKS, keeps printing out in the client window.
    }
}

我现在遇到的问题是在服务器端。

public class MainServer {

public static void main(String args[]) throws IOException
{
    int iterations;

    ServerSocket s1 = new ServerSocket(1342);
    Socket ss = s1.accept();
    Scanner sc = new Scanner(ss.getInputStream());      
    //iterations = sc.nextInt();

    while(true)
    {
        iterations = sc.nextInt();
        System.out.println("Server counted: " + iterations + " Iterations");
    }
}
}

我现在得到的错误来自服务器端,第 40 行是 iterations = sc.nextInt();

at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at TheServer.MainServer.main(MainServer.java:40)

最佳答案

p 无法解析,因为它在 connect() 中被声明为变量。您应该将其声明为类变量,只需确保在 run() 之前调用 connect() 方法,这样 p 就会被赋值且不为 null:

public class client implements Runnable
{
    public static int iterationCounter = 0;

    private PrintStream p;

    public static void serverConnect(int globalCount) throws UnknownHostException, IOException 
    {
        iterationCounter = globalCount;
    }

    public void connect() throws UnknownHostException, IOException
    {       
        Scanner sc = new Scanner(System.in); 
        Socket s = new Socket("127.0.0.1",1342); 

        p = new PrintStream(s.getOutputStream()); 
        //p.println(iterationCounter);
    }

    @Override 
    public void run() {
        while(true)
        {       
            if (p != null) // Make sure that p has been initialized 
              p.println(iterationCounter);  // p will be resolved now
            //System.out.println("Iteration: "+ iterationCounter); // WORKS, keeps printing out in the client window.
        }
}

关于java - 通过线程将变量从客户端发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53945489/

相关文章:

java.lang.UnsupportedOperationException 在 javax.faces.context.FacesContext.isReleased(FacesContext.java :609)

java - 当我运行 Flutter 项目时,我的 Ubuntu 系统出现此错误

java - 可以创建一个由多个线程共享的 for 循环吗?

java - 如何在 Jersey 客户端中读取有效负载

java - Camel 路线执行中的继续行为

java - 如何使用带有分组依据的投影从日期和多列中提取年、月,并使用 hibernate Criteria 作为别名给出

java - 如何限制正则表达式中字符的出现?

java - 为什么下面的例子中实例变量为空

java - 是否有 API/LIB 可以删除 JavaBackend 中的 JavaScript?

java - 如何减少InputStreams和OutputStreams之间的写入?