1、socket和serverSocket通信簡單介紹如下,注意客戶端與服務器端是怎么交換數據的
2、模擬qq聊天功能,實現客戶端與服務器(一對一)的聊天功能
服務器端代碼:
- <span style="font-size:16px;">package demo.net;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.Scanner;
- /**
- * 模擬qq聊天功能: 實現客戶端與服務器(一對一)的聊天功能,客戶端首先發起聊天,輸入的內容在服務器端和客戶端顯示,
- * 然后服務器端也可以輸入信息,同樣信息也在客戶端和服務器端顯示
- */
- // 服務器類
- public class ChatServer {
- private int port = 8189;// 默認服務器端口
- public ChatServer() {
- }
- // 創建指定端口的服務器
- public ChatServer(int port) {
- this.port = port;
- }
- // 提供服務
- public void service() {
- try {// 建立服務器連接
- ServerSocket server = new ServerSocket(port);
- // 等待客戶連接
- Socket socket = server.accept();
- try {
- // 讀取客戶端傳過來信息的DataInputStream
- DataInputStream in = new DataInputStream(socket
- .getInputStream());
- // 向客戶端發送信息的DataOutputStream
- DataOutputStream out = new DataOutputStream(socket
- .getOutputStream());
- // 獲取控制台輸入的Scanner
- Scanner scanner = new Scanner(System.in);
- while (true) {
- // 讀取來自客戶端的信息
- String accpet = in.readUTF();
- System.out.println(accpet);
- String send = scanner.nextLine();
- System.out.println("服務器:" + send);
- // 把服務器端的輸入發給客戶端
- out.writeUTF("服務器:" + send);
- }
- } finally {// 建立連接失敗的話不會執行socket.close();
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new ChatServer().service();
- }
- }
- </span>
客戶端代碼:
- <span style="font-size:16px;">package demo.net;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.net.Socket;
- import java.util.Scanner;
- /**
- * 注意用到的輸入輸出流DataInputStream和DataOutputStream,成對出現,最好用字節流
- */
- // 客戶端類
- public class ChatClient {
- private String host = "localhost";// 默認連接到本機
- private int port = 8189;// 默認連接到端口8189
- public ChatClient() {
- }
- // 連接到指定的主機和端口
- public ChatClient(String host, int port) {
- this.host = host;
- this.port = port;
- }
- public void chat() {
- try {
- // 連接到服務器
- Socket socket = new Socket(host, port);
- try {
- // 讀取服務器端傳過來信息的DataInputStream
- DataInputStream in = new DataInputStream(socket
- .getInputStream());
- // 向服務器端發送信息的DataOutputStream
- DataOutputStream out = new DataOutputStream(socket
- .getOutputStream());
- // 裝飾標准輸入流,用於從控制台輸入
- Scanner scanner = new Scanner(System.in);
- while (true) {
- String send = scanner.nextLine();
- System.out.println("客戶端:" + send);
- // 把從控制台得到的信息傳送給服務器
- out.writeUTF("客戶端:" + send);
- // 讀取來自服務器的信息
- String accpet = in.readUTF();
- System.out.println(accpet);
- }
- } finally {
- socket.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- new ChatClient().chat();
- }
- }
- </span>
運行結果:
注意運行的時候要先開服務器,再開客戶端,聊天由客戶端發起。運行結果中綠色的字表示輸入。
看完了,失望了吧,本人十月份開始看java的(以前有一點初步的了解),從《java常用類解析一:System類、Object類、Arrays類、Cloneable接口》到《java網絡編程》系列。此篇文章的本意是熟悉一下socket編程的,但看了評論之后我決定寫一個有界面實現部分qq功能的聊天工具軟件,各位大神,看完之后如果覺得被忽悠了就給點思路吧!thank you!