简单的TCP编程2

Posted superdrew

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的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;看看结果展示:

 

以上是关于简单的TCP编程2的主要内容,如果未能解决你的问题,请参考以下文章

第一次课:简单的TCP/IP编程实例

Python 之 Socket编程(TCP/UDP)

golang代码片段(摘抄)

简单的TCP编程2

Python网络编程02/基于TCP协议的socket简单的通信

go实现简单的tcp编程