Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保持ServerSocket监听客户端_Java_Sockets - Fatal编程技术网

Java 保持ServerSocket监听客户端

Java 保持ServerSocket监听客户端,java,sockets,Java,Sockets,我已经实现了android应用程序,它通过套接字(TCP)与服务器端进行通信。当我点击安卓应用程序中的按钮时,应用程序和服务器端之间正在建立通信,同时正在交换消息。 为了再次与服务器通信,我必须再次在Eclipse中运行服务器。我想运行服务器端一次,当clientSocket缓冲区中没有数据时,如果Android用户发送新请求,服务器应该再次侦听 我试图通过使用Runnable类来管理它,但是我仍然需要在Eclipse中再次运行服务器端?我怎样才能让它工作 public class Server

我已经实现了android应用程序,它通过套接字(TCP)与服务器端进行通信。当我点击安卓应用程序中的按钮时,应用程序和服务器端之间正在建立通信,同时正在交换消息。 为了再次与服务器通信,我必须再次在Eclipse中运行服务器。我想运行服务器端一次,当clientSocket缓冲区中没有数据时,如果Android用户发送新请求,服务器应该再次侦听 我试图通过使用
Runnable
类来管理它,但是我仍然需要在Eclipse中再次运行服务器端?我怎样才能让它工作

public class Server{

    public static void main(String args[]) throws Exception {
        Cg2AapiServer.startServer();

    }

    private static void startServer() {

        Runnable serverTask = new Runnable() {

            @Override
            public void run() {
                try {

                    ServerSocket serverSocket = new ServerSocket(27015);
                    Socket clientSocket = serverSocket.accept();

                    Cg2AapiServer.bufferedInputStream = new BufferedInputStream(clientSocket.getInputStream());
                    Cg2AapiServer.outputStream = clientSocket.getOutputStream();
                    Cg2AapiServer.smartCard = new SmartCard();
                    Cg2AapiServer.handleConnection();

                    Cg2AapiServer.bufferedInputStream.close();
                    Cg2AapiServer.outputStream.close();
                    clientSocket.close();
                } catch (IOException e) {
                    System.err.println("Unable to process client request");
                    e.printStackTrace();
                }
            }
        };
        Thread serverThread = new Thread(serverTask);
        serverThread.start();

        System.out.println("At the end of the startServer method!");

    }


    private static void handleConnection() throws IOException {
        ByteBuffer receiveBuffer = ByteBuffer.allocate(Cg2AapiServer.RECEIVE_BUFFER_LENGTH);
        int readBytes = 0;
        while (true) {
            readBytes = Cg2AapiServer.bufferedInputStream.read(receiveBuffer.array(), receiveBuffer.position(),
                    receiveBuffer.remaining());
            System.out.println("readBytes: " + readBytes);
            if (readBytes < 0) {
                             // What should I do here when the readBytes = -1
                Cg2AapiServer.startServer(); //With this line I am getting the error below.
                break;
            }
       }

}
公共类服务器{
公共静态void main(字符串args[])引发异常{
Cg2AapiServer.startServer();
}
私有静态void startServer(){
Runnable serverTask=new Runnable(){
@凌驾
公开募捐{
试一试{
ServerSocket ServerSocket=新的ServerSocket(27015);
Socket clientSocket=serverSocket.accept();
Cg2AapiServer.bufferedInputStream=新的bufferedInputStream(clientSocket.getInputStream());
Cg2AapiServer.outputStream=clientSocket.getOutputStream();
Cg2AapiServer.smartCard=新智能卡();
Cg2AapiServer.handleConnection();
Cg2AapiServer.bufferedInputStream.close();
Cg2AapiServer.outputStream.close();
clientSocket.close();
}捕获(IOE异常){
System.err.println(“无法处理客户端请求”);
e、 printStackTrace();
}
}
};
线程serverThread=新线程(serverTask);
serverThread.start();
System.out.println(“在startServer方法的末尾!”);
}
私有静态void handleConnection()引发IOException{
ByteBuffer receiveBuffer=ByteBuffer.allocate(CG2APIServer.RECEIVE_BUFFER_LENGTH);
int readBytes=0;
while(true){
readBytes=Cg2AapiServer.bufferedInputStream.read(receiveBuffer.array(),receiveBuffer.position(),
receiveBuffer.remaining());
System.out.println(“readBytes:+readBytes”);
if(readBytes<0){
//当readBytes=-1时,我应该在这里做什么
Cg2AapiServer.startServer();//通过这一行,我得到下面的错误。
打破
}
}
}
错误

无法处理客户端请求java.net.BindException:地址 已在使用中:JVM_绑定在 java.net.DualStackPlainSocketImpl.bind0(本机方法)位于 DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106) 在 java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376) 在java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)处 位于的java.net.ServerSocket.bind(ServerSocket.java:376) ServerSocket.(ServerSocket.java:237)位于 ServerSocket.(ServerSocket.java:128)位于 Cg2AapiServer$1.run(Cg2AapiServer.java:42)位于 run(Thread.java:745)


已在使用的地址:JVM\u Bind。您需要停止旧的正在运行的服务器,然后运行它。此错误意味着在您选择的端口号上已有内容正在侦听。已在使用的地址:JVM\u Bind。您需要停止旧的正在运行的服务器,然后运行它。此错误意味着在您选择的端口号上已有内容正在侦听。