通過Socket實現TCP編程,用戶登錄之服務器相應客戶端,客戶端和服務端之間的通信


服務器端:

  1.創建ServerSocket對象,綁定監聽端口;

  2.通過accept()方法監聽客戶端請求;

  3.建立連接后通過輸入流讀取客戶端發送的請求信息;

  4.通過輸出流向客戶端發送響應信息;

package com.wxd.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 基於TCP協議的Socket通信,實現用戶登錄,服務端
 */
public class Server {
    public static void main(String[] args) {
        try {
            //服務端
            //1、創建一個服務器端Socket,即ServerSocket,指定綁定的端口,並監聽此端口
            ServerSocket serverSocket =new ServerSocket(10086);//1024-65535的某個端口
            //2、調用accept()方法開始監聽,等待客戶端的連接
            Socket socket = serverSocket.accept();
            //3、獲取輸入流,並讀取客戶端信息
            InputStream is = socket.getInputStream();
            InputStreamReader isr =new InputStreamReader(is);
            BufferedReader br =new BufferedReader(isr);
            String info =null;
            while((info=br.readLine())!=null){
                System.out.println("我是服務器,客戶端說:"+info);
            }
            socket.shutdownInput();//關閉輸入流
            //4、獲取輸出流,響應客戶端的請求
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("歡迎您!");
            pw.flush();
            //5、關閉資源
            pw.close();
            os.close();
            br.close();
            isr.close();
            is.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

控制台輸出:

    我是服務器,客戶端說:用戶名:admin;密碼:123

 

客戶端:

  1.創建socket對象,指明需要連接的服務器地址和端口號;

  2.建立連接后,通過輸出流向服務器端發送請求信息;

  3.通過輸入流獲取服務器的響應信息;

  4.關閉相關資源;

package com.wxd.socket;

import java.io.*;
import java.net.Socket;

/**
 * 基於TCP協議的Socket通信,實現客戶端
 */
public class Client {
    public static void main(String[] args) {
        try {
            //客戶端
            //1、創建客戶端Socket,指定服務器地址和端口
            Socket socket =new Socket("localhost",10086);
            //2、獲取輸出流,向服務器端發送信息
            OutputStream os = socket.getOutputStream();//字節輸出流
            PrintWriter pw =new PrintWriter(os);//將輸出流包裝成打印流
            pw.write("用戶名:admin;密碼:123");
            pw.flush();
            socket.shutdownOutput();
            //3、獲取輸入流,並讀取服務器端的響應信息
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;
            while((info=br.readLine())!=null){
                System.out.println("我是客戶端,服務器說:"+info);
            }
            //4、關閉資源
            br.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

 

控制台輸出:  

我是客戶端,服務器說:歡迎您!

Process finished with exit code 0


免責聲明!

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



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