【Java网络编程(三)】TCP的使用——模拟用户登录
生活随笔
收集整理的這篇文章主要介紹了
【Java网络编程(三)】TCP的使用——模拟用户登录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版本一 創建簡單的連接
服務器端
package cn.hanquan.tcp;import java.io.DataInputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;/** 創建服務器* 1、指定端口 使用ServerSocket創建服務器* 2、阻塞式等待鏈接 accept* 3、操作:輸入輸出操作* 4、釋放資源*/ public class Server {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 使用ServerSocket創建服務器ServerSocket server = new ServerSocket(8888);// 2、阻塞式等待鏈接 acceptSocket client = server.accept();System.out.println("一個客戶端建立了鏈接");// 3、操作:輸入輸出操作DataInputStream dis = new DataInputStream(client.getInputStream());String data = dis.readUTF();System.out.println(data);// 4、釋放資源dis.close();client.close();} }客戶端
package cn.hanquan.tcp;import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException;/** 創建客戶端* 1、建立鏈接:使用Socket創建客戶端+指定服務器的地址和端口* 2、操作:輸入輸出流操作* 3、釋放資源*/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");// 1、建立鏈接:使用Socket創建客戶端+指定服務器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:輸入輸出流操作DataOutputStream dos = new DataOutputStream(client.getOutputStream());String data = "hello";dos.writeUTF(data);dos.flush();// 3、釋放資源dos.close();client.close();} }運行結果
版本二:輸入用戶名、密碼
server
package cn.hanquan.tcp;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;/** 創建服務器* 1、指定端口 使用ServerSocket創建服務器* 2、阻塞式等待鏈接 accept* 3、操作:輸入輸出操作* 4、釋放資源*/ public class Server {public static void main(String[] args) throws IOException {String name = "root";String pwd = "123";System.out.println("------Server------");// 1、指定端口 使用ServerSocket創建服務器ServerSocket server = new ServerSocket(8888);// 2、阻塞式等待鏈接 acceptSocket client = server.accept();System.out.println("一個客戶端建立了鏈接");// 3、操作:輸入輸出操作DataInputStream dis = new DataInputStream(client.getInputStream());String datas = dis.readUTF();// 分析String[] dataArray = datas.split(" ");System.out.println("你輸入的用戶名為:" + dataArray[0]);System.out.println("你輸入的用戶名為:" + dataArray[1]);String uname = dataArray[0];String upwd = dataArray[1];//發送結果DataOutputStream dos = new DataOutputStream(client.getOutputStream());if(uname.equals(name)&&upwd.contentEquals(pwd)) {//yesdos.writeUTF("登錄成功");}else {//nodos.writeUTF("用戶名或密碼錯誤");}// 4、釋放資源dis.close();client.close();} }client
package cn.hanquan.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;/** 創建客戶端* 1、建立鏈接:使用Socket創建客戶端+指定服務器的地址和端口* 2、操作:輸入輸出流操作* 3、釋放資源*/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");BufferedReader console = new BufferedReader(new InputStreamReader(System.in));System.out.println("請輸入用戶名:");String uname = console.readLine();System.out.println("請輸入密碼:");String upwd = console.readLine();// 1、建立鏈接:使用Socket創建客戶端+指定服務器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:輸入輸出流操作DataOutputStream dos = new DataOutputStream(client.getOutputStream());dos.writeUTF(uname + " " + upwd);dos.flush();// 接收結果DataInputStream dis = new DataInputStream(client.getInputStream());String datas = dis.readUTF();System.out.println(datas);// 3、釋放資源dos.close();client.close();} }版本三:文件上傳
server
package cn.hanquan.tcp;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket;/** 文件接收 大小無限制*/ public class Server {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 使用ServerSocket創建服務器ServerSocket server = new ServerSocket(8888);// 2、阻塞式等待鏈接 acceptSocket client = server.accept();System.out.println("一個客戶端建立了鏈接");// 3、操作:文件存儲InputStream is = new BufferedInputStream(new FileInputStream("頭像.jpg"));OutputStream os = new BufferedOutputStream(new FileOutputStream("tcp.jpg"));byte[] flush = new byte[1024];int len = -1;while ((len = is.read(flush)) != -1) {os.write(flush, 0, len);}os.flush();// 4、釋放資源is.close();os.close();client.close();} }client
package cn.hanquan.tcp;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException;/** 文件上傳 大小無限制*/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");// 1、建立鏈接:使用Socket創建客戶端+指定服務器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:文件上傳InputStream is=new BufferedInputStream(new FileInputStream("頭像.jpg"));OutputStream os=new BufferedOutputStream(client.getOutputStream());byte[]flush=new byte[1024];int len=-1;while((len=is.read(flush))!=-1) {os.write(flush,0,len);}os.flush();// 3、釋放資源os.close();is.close();client.close();} }版本四:多用戶登錄
服務端
(1)封裝之前的服務端
package cn.hanquan.tcp;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;/** 服務器 多用戶登錄*/ public class LoginMultiServer {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 使用ServerSocket創建服務器ServerSocket server = new ServerSocket(8888);boolean status = true;while (status) {// 2、阻塞式等待鏈接 acceptSocket client = server.accept();System.out.println("一個客戶端建立了鏈接");new Thread(new Channel(client)).start();// 成功連接,就開啟一個線程檢測登錄}} }class Channel implements Runnable {Socket client;public Channel(Socket client) {this.client = client;}@Override// 3、操作:輸入輸出操作public void run() {DataInputStream dis = null;String datas = null;try {dis = new DataInputStream(client.getInputStream());datas = dis.readUTF();// 分析String[] dataArray = datas.split(" ");System.out.println("你輸入的用戶名為:" + dataArray[0]);System.out.println("你輸入的用戶名為:" + dataArray[1]);String uname = dataArray[0];String upwd = dataArray[1];// 發送結果DataOutputStream dos = new DataOutputStream(client.getOutputStream());if (uname.equals("root") && upwd.contentEquals("123")) {dos.writeUTF("登錄成功");} else {dos.writeUTF("用戶名或密碼錯誤");}// 4、釋放資源dis.close();client.close();} catch (IOException e) {e.printStackTrace();}} }(2)封裝之后的服務端
package cn.hanquan.tcp;import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;/** 服務器 多用戶登錄*/ public class LoginMultiServer {public static void main(String[] args) throws IOException {System.out.println("------Server------");// 1、指定端口 創建服務器ServerSocket server = new ServerSocket(8888);boolean status = true;while (status) {// 2、阻塞式等待鏈接Socket client = server.accept();System.out.println("一個客戶端建立了鏈接");//每建立一個連接就 new 一個線程new Thread(new Channel(client)).start();}} }class Channel implements Runnable {Socket client;// 構造器public Channel(Socket client) {this.client = client;}@Overridepublic void run() {String datas = receive();boolean successLogIn = check(datas);send(successLogIn);}// 接收客戶端數據public String receive() {DataInputStream dis = null;String datas = null;try {dis = new DataInputStream(client.getInputStream());datas = dis.readUTF();} catch (IOException e) {e.printStackTrace();}return datas;}// 檢測登錄是否成功public boolean check(String datas) {try {// 分析String[] dataArray = datas.split(" ");System.out.println("你輸入的用戶名為:" + dataArray[0]);System.out.println("你輸入的用戶名為:" + dataArray[1]);String uname = dataArray[0];String upwd = dataArray[1];// 發送結果if (uname.equals("root") && upwd.contentEquals("123")) {return true;} else {return false;}} catch (Exception e) {e.printStackTrace();}return false;}public void send(boolean flag) {try {DataOutputStream dos = new DataOutputStream(client.getOutputStream());if (flag)dos.writeUTF("登錄成功");elsedos.writeUTF("用戶名或密碼錯誤");} catch (IOException e) {e.printStackTrace();}} }客戶端
package cn.hanquan.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; /** 客戶端*/ public class Client {public static void main(String[] args) throws UnknownHostException, IOException {System.out.println("------Client------");BufferedReader console = new BufferedReader(new InputStreamReader(System.in));System.out.println("請輸入用戶名:");String uname = console.readLine();System.out.println("請輸入密碼:");String upwd = console.readLine();// 1、建立鏈接:使用Socket創建客戶端+指定服務器的地址和端口Socket client = new Socket("localhost", 8888);// 2、操作:將用戶名和密碼傳輸到服務端DataOutputStream dos = new DataOutputStream(client.getOutputStream());dos.writeUTF(uname + " " + upwd);dos.flush();// 接收結果DataInputStream dis = new DataInputStream(client.getInputStream());String datas = dis.readUTF();System.out.println(datas);// 3、釋放資源dos.close();client.close();} }運行結果
總結
以上是生活随笔為你收集整理的【Java网络编程(三)】TCP的使用——模拟用户登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java网络编程(二)】UDP案例——
- 下一篇: java美元兑换,(Java实现) 美元