1. 程式人生 > >java.TCP通訊(實現服務端與客戶端簡單的聊天)

java.TCP通訊(實現服務端與客戶端簡單的聊天)

要求:

編寫兩個java application應用程式,完成以下功能:

一個程式為服務端,建立TCP服務端套接字。

l另外一個程式為客戶端,建立TCP客戶端套接字。

這兩個程式可以互聯,完成一個基於TCP/IP網路的文字聊天程式。

java原始碼如下:

1)基於TCP的服務端程式

import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TCPDemo { // 建立類
	private PrintWriter writer;
    private ServerSocket server; // 建立ServerSocket物件
    private Socket socket; // 建立Socket物件socket   
    void serve() {
        try {
            server = new ServerSocket(8080); // 例項化ServerSocket物件,設定埠為8080
            System.out.println("伺服器套接字已經建立成功"); 
            while (true) { // 如果套接字是連線狀態
                System.out.println("等待客戶機的連線......."); 
                socket = server.accept(); // 例項化Socket物件,使用accept方法等待客戶機連線
                writer = new PrintWriter(socket.getOutputStream(), true);//建立通訊通道,強行輸出資料
                writer.println("您已成功連線到遠端伺服器!"+"/"+"有什麼可以幫你的嗎?");//將資訊寫入流
                writer.flush();//關閉流
                Scanner sc=new  Scanner(System.in);
                Scanner sc1=new Scanner(socket.getInputStream());//從客戶機裡獲得輸入流並轉化為Scanner物件
                while(true){
                	String data = sc1.nextLine();
    				System.out.println("客戶機:"+data);
    				
    				System.out.print("我(服務機):");
    				String data1 = sc.nextLine();
    				//System.out.println("我(服務機):"+data1);
    				writer.println(data1);//將資料寫入流
    				writer.flush();//關閉流
            }
            }
        } catch (Exception e) {
            e.printStackTrace(); // 輸出異常資訊
        }
    }   
    public static void main(String[] args) { // 主方法
    	TCPDemo tcp = new TCPDemo(); // 建立本類物件
        tcp.serve(); // 呼叫方法
    }
}

2)基於TCP的客戶端程式:

  import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;
    public class TCP  { 
        private PrintWriter writer; // 宣告PrintWriter類物件
        Socket socket; // 宣告Socket物件    
        private void client() { // 連線套接字方法
            System.out.println("嘗試連線\n"); // 輸出提示資訊
            try { // 捕捉異常
                socket = new Socket("10.66.9.132", 8080); // 例項化Socket物件,連線埠8080伺服器
                writer = new PrintWriter(socket.getOutputStream(), true);//建立通訊通道,強行輸出資料
               System.out.println("完成連線");
               Scanner sc=new Scanner(socket.getInputStream());//獲得服務機的輸入流並轉為Scanner物件
               System.out.println(sc.nextLine());//輸出資訊
               System.out.println("我(客戶機):");
               Scanner sc1=new Scanner(System.in);
               while(true){
            	   String data=sc1.nextLine();
            	   //System.out.println("我(客戶機):"+data);
            	   writer.println(data);//將資料寫入流
            	   writer.flush();//關閉流
            	  
    
            	   String data1=sc.nextLine();
            	   System.out.println("服務機:"+data1);
            	   System.out.println("我(客戶機):");
               }
            } catch (Exception e) {
                e.printStackTrace(); // 輸出異常資訊
            }
        }
        
        public static void main(String[] args) { // 主方法
            TCP clien = new TCP(); // 建立本例物件       ![
](1)
            clien.client(); // 呼叫連線方法
        }
    }

分別執行兩個程式執行結果如下:

在這裡插入圖片描述