簡體   English   中英

如何將簡單的Java Echo Server更改為多線程?

[英]How to alter a simple Java Echo Server to be multithreaded?

對於大學的一項任務,我們不得不更改以下示例:

“用Java構建並測試一個簡單的單線程服務器程序,該程序將接受連接,返回該連接上的當前日期和時間,然后關閉該連接。”

我們班上的大多數人以前從未使用過JAVA,而講師說,只要可以使用,我們可以用任何方式編寫。

我更改了代碼以產生以下內容:

import java.net.*;
import java.io.*;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

public class EchoServer {
        public static void main(String[] args) throws IOException {


            int portNumber = 8080;


            try {
                ServerSocket serverSocket = new ServerSocket(portNumber);

                while(true) {

                    Socket clientSocket = serverSocket.accept();

                    PrintWriter out =
                            new PrintWriter(clientSocket.getOutputStream(), true);

                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(clientSocket.getInputStream()));

                    DateFormat df = new SimpleDateFormat("EEEE dd MMMM yyyy - HH:mm:ss");
                    Date dateobj = new Date();
                    //System.out.println(df.format(dateobj));

                    out.write("HTTP/1.1 200 OK\n\n<html><body>" + "The Date and Time is: " + df.format(dateobj) +
                    "</body></html>");

                    out.close();

                    serverSocket.close();

                    } //while
                }

            catch (IOException e) {
                System.out.println("Oops!");
                System.out.println(e.getMessage());
                }


        } //main

}

這可以正常工作,所以我很滿意。

我們要做的下一部分是:

“復制您的解決方案並將其更改為多線程版本。”

我們還為一些多線程代碼提供了另一個示例:

    public class SimpleThread extends Thread{


        protected String threadName;




    public SimpleThread(String name){
        threadName = name;
        }



    public void run(){
            for(int count = 1; count< 100; count++) {
                System.out.println("I am thread " + threadName + ". My count is: " + count);
            //do something slow
            //double result = Math.pow, 1.5);
            }
        }






public static void main(String[] args) {

    System.out.println("Test");


    for (int i = 0; i <10; i++) {
        SimpleThread ste = new SimpleThread("Thread " + i);
        ste.start();
        }


    }

}       

我在網上搜索了許多教程,並試圖將代碼實現到我的代碼中,但是最終我將其破壞了,並且無法編譯。

那么,如何更改代碼以使其成為多線程呢?

在第一個版本中,您僅接受一個連接,對其進行處理,然后退出。

這里的想法是接受多個連接,這意味着(可能永遠)循環:

Socket clientSocket = serverSocket.accept();

每次以此方式檢索到新的clientSocket時 ,都應實例化一個Thread,將其傳遞給clientSocket ,然后運行該線程,並使其與clientSocket一起執行操作(讀取,寫入..)。

其中幾個線程可能會同時運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM