java.TCP通訊(實現服務端與客戶端簡單的聊天)
阿新 • • 發佈:2018-12-16
要求:
編寫兩個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(); // 呼叫連線方法 } }
分別執行兩個程式執行結果如下: