歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java網絡編程一:Socket用法,簡單模擬一對一聊天

1、socket和serverSocket通信簡單介紹如下,注意客戶端與服務器端是怎麼交換數據的

 

 

2、模擬qq聊天功能,實現客戶端與服務器(一對一)的聊天功能

服務器端代碼:

  1. package demo.net;  
  2.   
  3. import java.io.DataInputStream;  
  4. import java.io.DataOutputStream;  
  5. import java.io.IOException;  
  6. import java.net.ServerSocket;  
  7. import java.net.Socket;  
  8. import java.util.Scanner;  
  9.   
  10. /** 
  11.  * 模擬qq聊天功能: 實現客戶端與服務器(一對一)的聊天功能,客戶端首先發起聊天,輸入的內容在服務器端和客戶端顯示, 
  12.  * 然後服務器端也可以輸入信息,同樣信息也在客戶端和服務器端顯示 
  13.  */  
  14.   
  15. // 服務器類   
  16. public class ChatServer {  
  17.     private int port = 8189;// 默認服務器端口   
  18.   
  19.     public ChatServer() {  
  20.     }  
  21.   
  22.     // 創建指定端口的服務器   
  23.     public ChatServer(int port) {  
  24.         this.port = port;  
  25.     }  
  26.   
  27.     // 提供服務   
  28.     public void service() {  
  29.         try {// 建立服務器連接   
  30.             ServerSocket server = new ServerSocket(port);  
  31.             // 等待客戶連接   
  32.             Socket socket = server.accept();  
  33.             try {  
  34.                 // 讀取客戶端傳過來信息的DataInputStream   
  35.                 DataInputStream in = new DataInputStream(socket  
  36.                         .getInputStream());  
  37.                 // 向客戶端發送信息的DataOutputStream   
  38.                 DataOutputStream out = new DataOutputStream(socket  
  39.                         .getOutputStream());  
  40.                 // 獲取控制台輸入的Scanner   
  41.                 Scanner scanner = new Scanner(System.in);  
  42.                 while (true) {  
  43.                     // 讀取來自客戶端的信息   
  44.                     String accpet = in.readUTF();  
  45.                     System.out.println(accpet);  
  46.                     String send = scanner.nextLine();  
  47.                     System.out.println("服務器:" + send);  
  48.                     // 把服務器端的輸入發給客戶端   
  49.                     out.writeUTF("服務器:" + send);  
  50.                 }  
  51.             } finally {// 建立連接失敗的話不會執行socket.close();   
  52.                 socket.close();  
  53.             }  
  54.         } catch (IOException e) {  
  55.             e.printStackTrace();  
  56.         }  
  57.     }  
  58.   
  59.     public static void main(String[] args) {  
  60.         new ChatServer().service();  
  61.     }  
  62. }  

客戶端代碼:

  1. package demo.net;  
  2.   
  3. import java.io.DataInputStream;  
  4. import java.io.DataOutputStream;  
  5. import java.io.IOException;  
  6. import java.net.Socket;  
  7. import java.util.Scanner;  
  8.   
  9. /** 
  10.  * 注意用到的輸入輸出流DataInputStream和DataOutputStream,成對出現,最好用字節流 
  11.  */  
  12. // 客戶端類   
  13. public class ChatClient {  
  14.     private String host = "localhost";// 默認連接到本機   
  15.     private int port = 8189;// 默認連接到端口8189   
  16.   
  17.     public ChatClient() {  
  18.   
  19.     }  
  20.   
  21.     // 連接到指定的主機和端口   
  22.     public ChatClient(String host, int port) {  
  23.         this.host = host;  
  24.         this.port = port;  
  25.     }  
  26.   
  27.     public void chat() {  
  28.         try {  
  29.             // 連接到服務器   
  30.             Socket socket = new Socket(host, port);  
  31.   
  32.             try {  
  33.                 // 讀取服務器端傳過來信息的DataInputStream   
  34.                 DataInputStream in = new DataInputStream(socket  
  35.                         .getInputStream());  
  36.                 // 向服務器端發送信息的DataOutputStream   
  37.                 DataOutputStream out = new DataOutputStream(socket  
  38.                         .getOutputStream());  
  39.   
  40.                 // 裝飾標准輸入流,用於從控制台輸入   
  41.                 Scanner scanner = new Scanner(System.in);  
  42.   
  43.                 while (true) {  
  44.                     String send = scanner.nextLine();  
  45.                     System.out.println("客戶端:" + send);  
  46.                     // 把從控制台得到的信息傳送給服務器   
  47.                     out.writeUTF("客戶端:" + send);  
  48.                     // 讀取來自服務器的信息   
  49.                     String accpet = in.readUTF();  
  50.                     System.out.println(accpet);  
  51.                 }  
  52.   
  53.             } finally {  
  54.                 socket.close();  
  55.             }  
  56.         } catch (IOException e) {  
  57.             e.printStackTrace();  
  58.         }  
  59.     }  
  60.   
  61.     public static void main(String[] args) {  
  62.         new ChatClient().chat();  
  63.     }  

運行結果:

          

注意運行的時候要先開服務器,再開客戶端,聊天由客戶端發起。運行結果中綠色的字表示輸入。

Copyright © Linux教程網 All Rights Reserved