为了账号安全,请及时绑定邮箱和手机立即绑定

java一直运行应用程序并在连接时向客户端发送数据?

java一直运行应用程序并在连接时向客户端发送数据?

慕容森 2022-01-12 16:15:55
我正在尝试执行以下操作:一直计算我的设备的运行时间,并且每当客户端连接时,他都会将其显示给他,直到他断开连接。怎么办?import java.io.*;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.concurrent.TimeUnit;public class MyServer {    public static void main(String[] args) {        connectToServer();    }    static Calendar startTime = Calendar.getInstance();    static long StartTime = System.currentTimeMillis();    public static void connectToServer() {        try(ServerSocket serverSocket = new ServerSocket(9991)) {            Socket connectionSocket = serverSocket.accept();            InputStream inputToServer = connectionSocket.getInputStream();            OutputStream outputFromServer = connectionSocket.getOutputStream();            Scanner scanner = new Scanner( inputToServer, "UTF-8" );            PrintWriter serverPrintOut = new PrintWriter(               new OutputStreamWriter( outputFromServer, "UTF-8" ), true );            serverPrintOut.println("Welcome to time server ");            while(true) {                long  EndTime = System.currentTimeMillis();                long Total =  EndTime -  StartTime;                serverPrintOut.println(Total);                System.out.println(Total);                try {                    Thread.sleep(1000);                }                catch(InterruptedException ex) {                    Thread.currentThread().interrupt();                }            }        } catch (IOException e) {            e.printStackTrace();        }    }}但他只开始向我展示用户连接的时间为什么?
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

服务器代码:


import java.io.IOException;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Calendar;


class ClientThread extends Thread {


   private final Socket _socket;


   public ClientThread( Socket socket ) {

      System.out.println( "New client" );

      _socket = socket;

      setDaemon( true );

      start();

   }


   @Override

   public void run() {

      try(

         final OutputStream outputFromServer = _socket.getOutputStream();

         final PrintWriter serverPrintOut = new PrintWriter(

            new OutputStreamWriter( outputFromServer, "utf-8" ), true ))

      {

         serverPrintOut.println( "Welcome to time server" );

         for(;;) {

            final long elapsed = System.currentTimeMillis() - MyServer.StartTime;

            serverPrintOut.println( elapsed );

            Thread.sleep( 1000L );

         }

      }

      catch( final InterruptedException ex) {/**/}

      catch( final IOException e ) {

         e.printStackTrace();

      }

   }

}


public class MyServer {


   static Calendar startTime = Calendar.getInstance();

   static long StartTime = System.currentTimeMillis();


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

      try( ServerSocket serverSocket = new ServerSocket( 9991 )) {

         for(;;) {

            new ClientThread( serverSocket.accept());

         }

      }

   }

}

客户端代码:


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.Socket;


public class MyClient {


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

      try(

         Socket socket = new Socket( args[0], 9991 );

         BufferedReader br = new BufferedReader(

            new InputStreamReader( socket.getInputStream(), "utf-8" )))

      {

         String line;

         while(( line = br.readLine()) != null ) {

            System.out.println( line );

         }

      }

   }

}

输出,服务器端:


$ java -cp bin so.MyServer 

New client

New client

输出,客户端:


$ java -cp bin so.MyClient localhost

Welcome to time server

3274

4274

5275

6275

7275

8276

9276

10276

11276

^C              <---- End of first client


$ java -cp bin so.MyClient localhost

Welcome to time server

19838

20838

21838

^C              <---- End of second client


查看完整回答
反对 回复 2022-01-12
  • 1 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号