java 基于TCP協(xié)議的SOCKET的編程和通信——模擬用戶登錄(2)

參考文檔:

https://www.sxt.cn/Java_jQuery_in_action/twelve-tcpsocket.html

參考視頻:

https://www.bilibili.com/video/BV1ct411n7oG?p=245

1.代碼功能

1.判斷從客戶端接收到的用戶名和密碼是否和已知的一致
2.返回服務(wù)器判斷的結(jié)果到客戶端上

2.學(xué)習(xí)重點(diǎn)

1.分清哪邊是輸入流哪邊是輸出流
2.split函數(shù)和數(shù)組的遍歷

3.客戶端代碼

1.發(fā)送數(shù)據(jù)用的輸出流和writeUTF(發(fā)送用戶名密碼)
2.接收數(shù)據(jù)用的輸入流和readUTF  (讀取服務(wù)器判斷的結(jié)果)
3.其他思路和之前一樣
package com.sxt.tcp;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 *模擬登錄 雙向
 * 創(chuàng)建客戶端
 * 1.建立連接:使用Socket創(chuàng)建客戶端+服務(wù)的地址和端口
 * 2.操作:輸入輸出流操作
 * 3.釋放資源
 * @author Yangxiaoxia
 *
 */
public class LoginTwoWayClient {
    public static void main(String[] args) throws UnknownHostException, IOException {
        System.out.println("-----Client-----");
        BufferedReader console =new BufferedReader(new InputStreamReader(System.in));
        System.out.print("請(qǐng)輸入用戶名:");
        String uname=console.readLine();
        System.out.print("請(qǐng)輸入密碼:");
        String upwd =console.readLine();
        //1.建立連接:使用Socket創(chuàng)建客戶端+服務(wù)的地址和端口
        Socket client=new Socket("localhost",8888);
        //2.操作:輸入輸出流操作
        DataOutputStream dos=new DataOutputStream(client.getOutputStream()); 
        dos.writeUTF("uname="+uname+"&"+"upwd="+upwd);
        dos.flush();
        
        DataInputStream dis=new DataInputStream(client.getInputStream());
        String result=dis.readUTF();
        System.out.println(result);
        //3.釋放資源
        dos.close();
        client.close();
    }
}

4.服務(wù)器端代碼

  1.判斷客戶端傳來的輸入流里的數(shù)據(jù)是否符合條件,然后以輸出流返回結(jié)果給客戶端
package com.sxt.tcp;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 模擬登錄 雙向
 * 創(chuàng)建服務(wù)器
 * 1.指定端口 使用ServerSocket創(chuàng)建服務(wù)器
 * 2.阻塞式等待連接 accept
 * 3.操作:輸入輸出流操作
 * 4.釋放資源
 * @author Yangxiaoxia
 *
 */
public class LoginTwoWayServer {
    public static void main(String[] args) throws IOException {
        System.out.println("------Server-------");
         // 1.指定端口 使用ServerSocket創(chuàng)建服務(wù)器
        ServerSocket server=new ServerSocket(8888);
         // 2.阻塞式等待連接 accept
        Socket client=server.accept();
        System.out.println("一個(gè)客戶端建立了連接");
         // 3.操作:輸入輸出流操作
        DataInputStream dis=new DataInputStream(client.getInputStream());
        String data=dis.readUTF();
        System.out.println(data);
        String uname=" ";
        String upwd=" ";
        //分析
        String[] dataArray=data.split("&");
        for(String info:dataArray) {
            String[] userinfo=info.split("=");
            if(userinfo[0].equals("uname")) { 
                uname=userinfo[1];
            }else if(userinfo[0].equals("upwd")) { 
                upwd=userinfo[1];
            } 
        }
        //輸出
        DataOutputStream dos=new DataOutputStream(client.getOutputStream());
        if(uname.equals("baidu")&& upwd.equals("123456")) {//成功
            dos.writeUTF("登錄成功,歡迎回來");
        }else {//失敗
            dos.writeUTF("用戶名或密碼錯(cuò)誤");
        }
        dos.flush();
         //4.釋放資源
        dis.close();
        client.close();
        server.close();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容