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.     }  

运行结果:

          

注意运行的时候要先开服务器,再开客户端,聊天由客户端发起。运行结果中绿色的字表示输入。

相关内容