• 简单的TCP编程2


    加入实体类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 import java.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 }
    LoginServer.java

    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;看看结果展示:

  • 相关阅读:
    历史书单
    《Tornado介绍》—— 读后总结
    基于TensorFlow的深度学习系列教程 2——常量Constant
    深度学习Tensorflow生产环境部署(下·模型部署篇)
    深度学习Tensorflow生产环境部署(上·环境准备篇)
    Crontab和sudo中无法使用TensorFlow ImportError libcublas.so.9.0
    基于TensorFlow的深度学习系列教程 1——Hello World!
    想要接触人工智能吗?先要学会如何阅读论文
    《数据挖掘与数据化运营实战 思路、方法、技巧与应用》—— 读书笔记
    《新参者》—— 读后总结
  • 原文地址:https://www.cnblogs.com/superdrew/p/8098540.html
Copyright © 2020-2023  润新知