首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >客户端不处理从服务器发送的命令。Java

客户端不处理从服务器发送的命令。Java
EN

Stack Overflow用户
提问于 2017-04-29 14:29:56
回答 1查看 42关注 0票数 0

我的客户端不处理从服务器发送的命令,但是我的服务器可以处理客户端发送的命令。如果我在调试中运行我的客户端而不是线程" in“正在等待输入字符串和命令过程.

为了便于阅读,我减少了我的代码。

服务器:

代码语言:javascript
复制
public class Server extends Thread{

    BufferedReader in;
    PrintWriter out;
    ServerSocket server;
    Socket client = null;
    Frame frame;

Server() throws IOException{
    frame = new Frame();
    try {
        server = new ServerSocket(4444);
        frame.textAreaForServer.append("Welcome to server side!\n");
    } catch (IOException e) {
        frame.textAreaForServer.append("Couldn't listen to port 4444\n");
        System.exit(-1);
    }
    addListenerOnTextField();
    this.start();
}

private void clearVector(){
    frame.textAreaForServer.append("-clr\n");
    try {
        //send message for client
        out.println("-clr");
        frame.textAreaForServer.append("Vector is cleared\n");
    } catch (NullPointerException e1) {
        frame.textAreaForServer.append("It's impossible to perform!\n");
    }
}

public void run(){
    while (true) {
        try {
             //connection to client
            if (client == null) {
                frame.textAreaForServer.append("Waiting for client connection...\n");
                client = server.accept();
                in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                out = new PrintWriter(client.getOutputStream(), true);
                frame.textAreaForServer.append("Client connected\n");              
            }
        } catch (IOException e) {
            frame.textAreaForServer.append("Can't accept\n");
            System.exit(-1);
        }            
    }
}

客户端:

代码语言:javascript
复制
public class Client extends Thread{

    Socket fromserver = null;
    BufferedReader in = null;
    PrintWriter out;
    ControlPanel controlPanel;

    Client(ControlPanel controlPanel1) throws IOException {
        controlPanel = controlPanel1;
        addListenerOnTextField();
        this.start();
    }

    //connection to server
    private void connect(ControlPanel controlPanel) {
        controlPanel.textAreaForClient.append("-ct\n");
        if (fromserver == null) {
            controlPanel.textAreaForClient.append("Connecting to localhost...\n");
            try {
                fromserver = new Socket("localhost", 4444);
                in = new BufferedReader(new InputStreamReader(fromserver.getInputStream()));
                out = new PrintWriter(fromserver.getOutputStream(), true);
            } catch (IOException e1) {
                controlPanel.textAreaForClient.append("Server is not available!\n");
            }
        } else {
            controlPanel.textAreaForClient.append("Already connected\n");
        }
    }

    public void run() {
    while (true) {
        //here the -clr command sent from server should be proceeded, but it doesn't
        try {
            switch (in.readLine()) {
                case "-clr": {
                    VectorOfThreads.getInstance().getVectorOfThreads().removeAllElements();
                    controlPanel.textAreaForClient.append("Vector is cleared\n");
                    break;
                }
            }
        } catch (IOException e) {
           e.printStackTrace();
        }
    }
}

}

EN

回答 1

Stack Overflow用户

发布于 2017-04-29 15:47:49

在客户端类中,在读取任何输入流之前,您似乎忘记了连接到服务器。而且,在服务器线程中创建输出流之后,您没有调用ClearVector。

我基于您的代码实现了一个非常基本的服务器/客户端程序。它工作得很好:

服务器类:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;
import jdk.internal.org.objectweb.asm.tree.analysis.Frame;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Emad
 */
public class Server extends Thread {

    BufferedReader in;
    PrintWriter out;
    ServerSocket server;
    Socket client = null;
    Frame frame;

    Server() throws IOException {
        try {
            server = new ServerSocket(4444);
            System.out.println("Welcome to server side. listening on port 4444");
        } catch (IOException e) {
            System.out.println("Couldn't listen to port 4444\\n");
            System.exit(-1);
        }
        this.start();
    }

    private void clearVector() {
        System.out.println(" -clr command send\n");
        try {
            //send message for client
            out.println("-clr");
            System.out.println("Vector is cleared\n");
        } catch (NullPointerException e1) {
            System.out.println("It's impossible to perform\n");
        }
    }

    public void run() {
        while (true) {
            try {
                //connection to client
                if (client == null) {
                    System.out.println("Waiting for client connection...\\n");
                    client = server.accept();
                    in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    out = new PrintWriter(client.getOutputStream(), true);
                    clearVector();
                    System.out.println("Client Connected!");
                }
            } catch (IOException e) {
                System.out.println("Can't accept.\n");
                System.exit(-1);
            }
        }
    }

    public static void main(String args[])
    {
        try {
            Server serverInstance = new Server();
        } catch (IOException ex) {
            System.out.println("Exception");
            Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

客户端类:

代码语言:javascript
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Emad
 */
public class Client extends Thread {

    Socket fromserver = null;
    BufferedReader in = null;
    PrintWriter out;

    Client() throws IOException {
        this.start();
    }

    //connection to server
    private void connect() {
        System.out.println("-ct\n");
        if (fromserver == null) {
            System.out.println("Connecting to localhost...\n");
            try {
                fromserver = new Socket("localhost", 4444);
                in = new BufferedReader(new InputStreamReader(fromserver.getInputStream()));
                out = new PrintWriter(fromserver.getOutputStream(), true);
            } catch (IOException e1) {
                System.out.println("Server is not available!\n");
            }
        } else {
            System.out.println("Already connected\n");
        }
    }

    public void run() {
        connect();
        while (true) {
            //here the -clr command sent from server should be proceeded, but it doesn't
            try {
                switch (in.readLine()) {
                    case "-clr": {
                        System.out.println("Vector is cleared\n");
                        break;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String args[])
    {
        try {
            Client clientInstance = new Client();
        } catch (IOException ex) {
            System.out.println("Error in instanciating client");
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43696832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档