Java网络编程笔记(练习题)

TCP网络编程

练习题

编写一个服务器和一个客户端
1)服务器上保存了几个用户名和对应的密码;且能验证客户端发送过来的用户名和密码,是否和保存的某个用户名和对应的密码一致。
2)客户端能连接到服务器,并把用户在键盘上输入的用户名和密码,发送到服务器上。

不完整代码,有错误还请各位大佬指出(鞠躬)
TCPTest.java

package internettest;

import org.junit.Test;

import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * 编写一个服务器和一个客户端
 * 1)服务器上保存了几个用户名和对应的密码;且能验证客户端发送过来的用户名和密码,是否和保存的某个用户名和对应的密码一致.
 * 2)客户端能连接到服务器,并把用户在键盘上输入的用户名和密码,发送到服务器上
 */
public class TCPTest {
    //客户端
    public static void main(String[] args) {
        Socket socket = null;
        OutputStream os = null;
        try {
            InetAddress inet = InetAddress.getByName("127.0.0.1");
            socket = new Socket(inet, 1122);

            Scanner scanner = new Scanner(System.in);
            //把用户名和密码连接为一个字符串user
            System.out.println("请输入用户名:");
            String username = scanner.next();
            System.out.println("请输入密码:");
            String password = scanner.next();
            String user = username + "," + password;

			//传给服务端
            os = socket.getOutputStream();
            os.write(user.getBytes());
            socket.shutdownOutput();

            //接收登录结果,1表示登录成功,0则失败
            InputStream is = socket.getInputStream();
            int result = 0;
            while ((result = is.read()) != -1) {
                if (result == 1) {
                    System.out.println("登录成功");
                } else if (result == 0) {
                    System.out.println("登录失败");
                }
            }


            //接收服务器的信息
            //不知道为什么不能用这个
//        InputStream is = socket.getInputStream();
//        int data;
//        while ((data = is.read()) != -1){
//            System.out.println((char)data);
//        }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //服务端
    @Test
    public void server() {
        ServerSocket ss = null;
        Socket socket = null;
        BufferedReader br = null;
        try {
        //暂时定死一个用户名和密码
            String username = "admin";
            String password = "1234";
            //1.
            ss = new ServerSocket(1122);
            //2.
            socket = ss.accept();
            //3.读取客户端的值
            InputStream is = socket.getInputStream();
            br = new BufferedReader(new InputStreamReader(is));
            String user = br.readLine();
            System.out.println(user);
            //4.返回客户端
            OutputStream os = socket.getOutputStream();

            String[] users = user.split(",");
//        for (String s : users){
//            System.out.println(s);
//        }

            if (users[0].equals(username) && users[1].equals(password)) {
                os.write("登录成功".getBytes());
                //os.write("1".getBytes());
                System.out.println("登录成功");
            } else {
                os.write("登陆失败".getBytes());
                //os.write("0".getBytes());
                System.out.println("登陆失败");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ss != null) {
                //5.
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

运行结果如下:
客户端:
在这里插入图片描述
服务端:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值