简单的TCP编程2

本文介绍了一个简单的TCP登录系统实现,包括服务器端和客户端的交互过程。用户通过客户端输入用户名和密码,服务器验证后返回登录结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加入实体类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;看看结果展示:

 

转载于:https://www.cnblogs.com/superdrew/p/8098540.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值