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


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

 

 

 

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

服務器端代碼:

[java]   view plain copy
  1. <span style="font-size:16px;">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. }  
  63. </span>  


 

客戶端代碼:

[java]   view plain copy
  1. <span style="font-size:16px;">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.     }  
  64. }  
  65. </span>  


 

運行結果:

 

   

 

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

 

 看完了,失望了吧,本人十月份開始看java的(以前有一點初步的了解),從《java常用類解析一:System類、Object類、Arrays類、Cloneable接口》到《java網絡編程》系列。此篇文章的本意是熟悉一下socket編程的,但看了評論之后我決定寫一個有界面實現部分qq功能的聊天工具軟件,各位大神,看完之后如果覺得被忽悠了就給點思路吧!thank you!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM