簡單的TCP編程2
阿新 • • 發佈:2017-12-24
import -- args serve turn 應該 功能 display cli
加入實體類User編程:
LoginServer.java:
1 package tcp1; 2 3 import java.io.DataInputStream; 4 import java.io.DataOutputStream; 5 import java.io.FileInputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.ObjectInputStream; 9 import java.net.ServerSocket; 10 importLoginServer.javajava.net.Socket; 11 12 /** 13 * 登錄的服務器 14 * @author superdrew 15 * TCP 登錄 16 * 功能:用戶在客戶端輸入用戶名和密碼提交給服務器,服務器接收並處理,處理完後給客戶端一個返回信息 17 * 客戶端接口服務器的反饋消息並輸出 18 * 問題分解1.先做一個單向通道,用戶輸入用戶名和密碼,服務器接收並輸出 19 * 2.雙向通道,服務器進行處理,處理完反饋一個信息給客戶端,客戶端接收並輸出 20 * 采用對象流傳輸數據 21 *22 * 缺點:服務器處理一次用戶請求之後,就關閉了 23 * 應該是服務器一直監聽,可以處理多個用戶的請求 24 */ 25 public class LoginServer { 26 public static void main(String[] args) throws IOException, ClassNotFoundException { 27 //1.創建一個serversocket 創建服務 28 ServerSocket serverSocket = new ServerSocket(8888);//端口 8888 IP地址是本機 29 //2.使用 serversocket 監聽 socket 套接字 30 Socket socket = serverSocket.accept(); 31 32 //3.接收用戶請求,並處理 33 //InputStream is = new FileInputStream("d:/b.txt");從文件讀取 34 InputStream is = socket.getInputStream(); 35 ObjectInputStream ois = new ObjectInputStream(is); 36 User user = (User)ois.readObject();//向下轉型 37 38 //4.給客戶端反饋一個消息 39 DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); 40 if("drew".equals(user.getName()) && "123".equals(user.getPassword())){ 41 dos.writeUTF("登錄成功!--Welcome to here."); 42 }else{ 43 dos.writeUTF("登錄失敗,請重新輸入用戶名和密碼!"); 44 } 45 System.out.println(user); 46 //5.關閉資源 --關閉的順序有關系嗎? 47 dos.close(); 48 ois.close(); 49 socket.close(); 50 serverSocket.close(); 51 } 52 }
LoginClient.java:
1 package tcp1; 2 3 import java.io.DataInputStream; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.ObjectOutputStream; 7 import java.io.OutputStream; 8 import java.net.InetAddress; 9 import java.net.Socket; 10 import java.net.UnknownHostException; 11 import java.util.Scanner; 12 13 /** 14 * 登錄的客戶端 15 * @author superdrew 16 * 17 */ 18 public class LoginClient { 19 public static void main(String[] args) throws UnknownHostException, IOException { 20 //1.創建一個socket 連接服務器 21 Socket socket = new Socket(InetAddress.getLocalHost(), 8888);//必須要知道服務器IP和端口號 22 23 //2.通過 socket 發送數據給服務器 24 //OutputStream os = new FileOutputStream("d:/b.txt");輸出到文件 25 //發送對象到服務器 26 Scanner sc = new Scanner(System.in); 27 System.out.println("請輸入用戶名:"); 28 String name = sc.nextLine(); 29 System.out.println("請輸入密碼:"); 30 String password= sc.nextLine(); 31 User user = new User(name,password); 32 33 OutputStream os = socket.getOutputStream(); 34 ObjectOutputStream oos = new ObjectOutputStream(os); 35 oos.writeObject(user); 36 37 //3.接收服務器返回的消息 38 DataInputStream dis = new DataInputStream(socket.getInputStream()); 39 String result = dis.readUTF(); 40 System.out.println("服務器返回的消息:"+result); 41 42 //4.關閉資源 43 dis.close(); 44 oos.close(); 45 socket.close(); 46 } 47 }LoginClient.java
實體類User.java:
1 package tcp1; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable{ 6 7 private static final long serialVersionUID = 4624000778154303345L; 8 private String name; 9 private String password; 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 public String getPassword() { 17 return password; 18 } 19 public void setPassword(String password) { 20 this.password = password; 21 } 22 public User(String name, String password) { 23 super(); 24 this.name = name; 25 this.password = password; 26 } 27 public User() { 28 super(); 29 } 30 @Override 31 public String toString() { 32 return "User [name=" + name + ", password=" + password + "]"; 33 } 34 35 36 }User.java
首先開啟運行服務LoginService.java,然後開啟客戶端LoginClient.java,輸入用戶名drew,輸入密碼123;看看結果展示:
①②③
簡單的TCP編程2