日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

TCP通信的實現-優化點對點聊天

作者:Qiddo 更新時間: 2023-12-12 編程語言

在上一篇博客中聊天的功能已經實現,但為了更為方便發送和接收信息,將代碼合并(客戶端和服務端一起處理),全部代碼如下:

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.Scanner;

/**
 * 發送消息線程
 */
class Send1 extends Thread{
    private Socket socket;
    private Scanner scanner;
    public Send1(Socket socket,Scanner scanner){
        this.socket = socket;
        this.scanner = scanner;
    }
    @Override
    public void run() {
        this.sendMsg();
    }
    /**
     * 發送消息
     */
    private void sendMsg(){

        //創建向對方輸出消息的流對象
        try(PrintWriter pw = new PrintWriter(this.socket.getOutputStream())){

            while(true){
                String msg = scanner.nextLine();
                pw.println(msg);
                pw.flush();
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

/**
 * 接收消息的線程
 */
class Receive1 extends Thread{
    private Socket socket;
    public Receive1(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {
        this.receiveMsg();
    }
    /**
     * 用于接收對方消息的方法
     */
    private void receiveMsg(){
        //創建用于接收對方發送消息的流對象
        try(BufferedReader br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()))){

            while(true){
                String msg = br.readLine();
                System.out.println("他說:"+msg);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}

public class GoodTCP {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        try{
            //實例化鍵盤輸入
            Scanner scanner = new Scanner(System.in);
            System.out.println("請輸入:server,<port>或者:<ip>,<port>");
            String str = scanner.nextLine();
            String[] arr = str.split(",");
            if("server".equals(arr[0])){
                //啟動服務端
                System.out.println("TCP Server Listen at "+arr[1]+".......");
                serverSocket = new ServerSocket(Integer.parseInt(arr[1]));
                socket = serverSocket.accept();
            }else{
                //啟動客戶端
                socket = new Socket(arr[0],Integer.parseInt(arr[1]));
                System.out.println("連接成功!");
            }
            //啟動發送消息的線程
            new Send1(socket,scanner).start();
            //啟動接收消息的線程
            new Receive1(socket).start();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(serverSocket!=null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

代碼需運行兩次,一次作為客戶端,一次作為服務端,實現點對點的聊天功能。

原文鏈接:https://blog.csdn.net/m0_73944607/article/details/130893883

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新