歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java網絡編程一:Socket用法,簡單模擬一對一聊天

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

日期:2017/3/1 10:56:00   编辑:Linux編程

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

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

服務器端代碼:

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

客戶端代碼:

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

運行結果:

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

Copyright © Linux教程網 All Rights Reserved