Java 在后台运行服务器套接字代码,然后运行客户端代码

Java 在后台运行服务器套接字代码,然后运行客户端代码,java,swing,background,Java,Swing,Background,将两个文件(客户机和服务器)中的代码合并为一个文件后,控件再也不会到达客户机代码。但是,我需要在后台运行服务器代码,然后运行客户端代码 这是我的密码: //Server code try { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(10007); } catch (IOException e)

将两个文件(客户机和服务器)中的代码合并为一个文件后,控件再也不会到达客户机代码。但是,我需要在后台运行服务器代码,然后运行客户端代码

这是我的密码:

 //Server code 

 try {
        ServerSocket serverSocket = null; 

    try { 
         serverSocket = new ServerSocket(10007); 
        } 
    catch (IOException e) 
        { 
         System.err.println("Could not listen on port: 10007."); 
         System.exit(1); 
        } 

    Socket clientSocket = null; 
    System.out.println ("Waiting for connection.....");

    try { 
         clientSocket = serverSocket.accept(); 
        } 
    catch (IOException e) 
        { 
         System.err.println("Accept failed."); 
         System.exit(1); 
        } 

    System.out.println ("Connection successful");
    System.out.println ("Waiting for input.....");

    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), 
                                      true); 
    BufferedReader in = new BufferedReader( 
            new InputStreamReader( clientSocket.getInputStream())); 

    String inputLine; 

    while ((inputLine = in.readLine()) != null) 
        { 
         System.out.println ("Server: " + inputLine); 
         out.println(inputLine); 

         if (inputLine.equals("Bye.")) 
             break; 
        } 

    out.close(); 
    in.close(); 
    clientSocket.close(); 
    serverSocket.close(); 

  //Client code 
        String serverHostname = new String ("127.0.0.1");
        System.out.println ("Attemping to connect to host " +
                serverHostname + " on port 10007.");
        Socket echoSocket = null;
        try {
            echoSocket = new Socket(serverHostname, 10007);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: " + serverHostname);               
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                               + "the connection to: " + serverHostname);              
        }

        BufferedReader stdIn = new BufferedReader(
                                   new InputStreamReader(System.in));
        String userInput;

        System.out.print ("input: ");           
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                System.out.println("echo: " + in.readLine());
                System.out.print ("input: ");
            }
        out.close();
        try {
            in.close();           
            stdIn.close();           
            echoSocket.close();
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }

我不明白如何在后台运行服务器代码,然后再运行客户端代码

你需要上两门课:

  • 一个客户
  • 一台服务器
每个函数都有自己的main()方法

这样,您就可以启动两个JVM的一个服务器,一个客户机

或在一个类中:

创建两个静态内部类implement
Runnable
,然后从主类内部开始这两个类:(我假设主类称为Starter)


我将允许您执行清理代码…

使用嵌套在主
服务器
类中的
公共静态类客户机
。它们中的每一个都可以有自己的
main
方法,因此这是一种在一个文件中实现所有目标的方法,但有两个单独的入口点


另一种选择是使用一个入口点,但让它启动两个线程,一个用于客户端,另一个用于服务器。

从技术上讲,您可以在一个源文件中通过实例化一个调用服务器代码的线程来完成这一切

    // Start the Server
    new Thread(new Runnable() {
        public void run() {
            // .. all the server code
        }
    }).start();

    // Start the client

    // .. all the client code

在幕后,Java可能正在为新的Runnable(){}技术之类的东西创建匿名内部类。

看看这是否可行。查看教程,但我需要一次单击就在一个类中运行这两个类。可能吗?是的,但是你必须生成一个线程,你有两个选择。。。旧的方式,然后你看runnable接口,或者新的方式,然后你看并发框架。@Frank runnable“旧”和并发框架“新”是什么?据我所知,Runnable是并发的一部分framework@SandipArmalPatil你能详细解释一下为什么它需要在“一”类中运行吗?Runnable从JDK1.0开始已经存在了一段时间。。。现在还有别的办法
    // Start the Server
    new Thread(new Runnable() {
        public void run() {
            // .. all the server code
        }
    }).start();

    // Start the client

    // .. all the client code