网络编程——Socket——模拟用户登录

功能一:模拟用户登录

功能二:实现客户发送登录用户信息,服务器端显示登录信息并响应给客户端登录成功

这里设置的用户登录信息为:admin,123456

实现:

1.首先,服务端创建并启动服务器,并开放一个端口给客户端----服务端

ServerSocket serverSocket = new ServerSocket(1111);
Socket socket = serverSocket.accept();

2.在客户端创建Socket并连接到服务器----客户端

Socket socket = new Socket("127.0.0.1", 1111);

3.在客户端初始化输出流,用于向服务端发送数据----客户端

OutputStream os = socket.getOutputStream();

4.在客户端进行登录----客户端

System.out.println("------用户登录-------");
System.out.print("请输入用户名:");
String username = sc.nextLine();
System.out.print("请输入密码:");
String password = sc.nextLine();

5.将用户输入信息封装为User对象,并将其序列化发送给服务器,发送后关闭输出流,发送完成信号----客户端

User user = new User(username, password);

ObjectOutputStream oos = new ObjectOutputStream(os);

oos.writeObject(user);

socket.shutdownOutput();

6.在服务端打开输入流,接收客户端发送过来的数据流----服务端

InputStream is = socket.getInputStream();

7.在服务端,将输入流包装成对象输入流,用于读取序列化对象,并读取客户端传来的User对象----服务端

ObjectInputStream ois = new ObjectInputStream(is);

User user = (User) ois.readObject();

8.服务端接收到用户登录信息后进行打印,并验证----服务端

System.out.println("服务器端:接收到用户登录请求:用户名:" + user.getUsername()
+ ",密码:" + user.getPassword());
String msg = null;

if ("admin".equals(user.getUsername()) && "123456".equals(user.getPassword())){
System.out.println("服务器端:用户登录成功");
// 设置成功登录的消息,向客户端发送消息
msg ="欢迎【" + user.getUsername() + "】登录成功";
}else {
System.out.println("服务器端:用户登录失败");
// 设置登录失败的消息
msg ="用户名或密码错误,请重新登录";
}

9.在服务端进行验证后,将结果发送个客户端----服务端

OutputStream os = socket.getOutputStream();

os.write(msg.getBytes());

10.客户端正在等待服务器的响应----客户端

InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println("服务器端:" + line);
}

11.别忘了最后要进行关闭哦

结果

先运行服务端在运行客户端

客户端运行结果:

服务端运行结果:

完整代码

客户端:

public class LoginClient {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        // 创建Socket连接到服务器
        Socket socket = new Socket("127.0.0.1", 1111);

        //打开输出流,初始化输出流,用于向服务器发送数据
        OutputStream os = socket.getOutputStream();

        ObjectOutputStream oos = new ObjectOutputStream(os);

        // 用户登录界面交互
        System.out.println("------用户登录-------");
        System.out.print("请输入用户名:");
        String username = sc.nextLine();
        System.out.print("请输入密码:");
        String password = sc.nextLine();
        // 将用户输入封装为User对象
        User user = new User(username, password);

        // 将User对象序列化并发送给服务器
        oos.writeObject(user);
        // 关闭输出流,发送完成信号
        socket.shutdownOutput();

        //等待、接受服务器响应
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println("服务器端:" + line);
        }

        //关闭输入流
        br.close();
        is.close();
        os.close();
        socket.close();
    }
}

服务端:

public class LoginServer {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 创建并启动服务器,监听1111端口
        ServerSocket serverSocket = new ServerSocket(1111);
        Socket socket = serverSocket.accept();

        //打开输入流,接收客户端发送过来的数据流
        InputStream is = socket.getInputStream();
        // 将输入流包装成对象输入流,用于读取序列化对象
        ObjectInputStream ois = new ObjectInputStream(is);
        // 读取客户端传来的User对象
        User user = (User) ois.readObject();

        // 打印接收到的用户登录信息
        System.out.println("服务器端:接收到用户登录请求:用户名:" + user.getUsername()
                + ",密码:" + user.getPassword());

        String msg = null;
        // 验证用户登录信息
        if ("admin".equals(user.getUsername()) && "123456".equals(user.getPassword())){
            System.out.println("服务器端:用户登录成功");
            // 设置成功登录的消息,向客户端发送消息
            msg ="欢迎【" + user.getUsername() + "】登录成功";
        }else {
            System.out.println("服务器端:用户登录失败");
            // 设置登录失败的消息
            msg ="用户名或密码错误,请重新登录";
        }
        // 获取输出流,向客户端发送消息
        OutputStream os = socket.getOutputStream();
        // 将消息转换为字节流并发送
        os.write(msg.getBytes());
        // 关闭相关资源
        os.close();
        ois.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}
  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 计算机网络的课程作业-基于python实现网络聊天室源码+部署操作说明+注释拉满.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 该项目为计算机网络的课程作业——网络聊天室,涵盖了基本的socket网络编程、Tkinter图像化界面、MySQL数据库等技术,可实现表情包的发送、单用户私聊、机器人对话等功能 用户密码采用MD5加密(可根据需要,灵活调整为其他加密方式) 支持发送表情包 支持消息记录同步(从数据库中读取历史消息) 支持单用户私聊(通过@实现,eg:@test 这是一条私聊消息) 持与智能机器人聊天(同样通过@实现,eg:@robot 你好) ## 1.项目结构 chatRoom ├─ emoji      //存放表情包的文件夹 │ ├─ concerned.png │ ├─ facepalm.png │ ├─ smart.png │ └─ smirk.png ├─ image      //可视化界面中用到的图片 │ ├─ key.png │ └─ user.png ├─ res │ ├─ screenshot      //屏幕截图 │ │ ├─ 登录界面.png │ │ └─ 聊天界面.png │ └─ chat.sql      //配套SQL脚本 ├─ Client.py      //客户端类 ├─ databaseTool.py      //数据库操作类 ├─ LoginPanel.py      //可视化登录界面类 ├─ Main.py      //用户主类 ├─ MainPanel.py      //可视化主界面类 ├─ MD5.py      //MD5加密工具 ├─ README.md ├─ RegisterPanel.py      //可视化注册类 └─ Server.py      //服务端脚本 ## 2.环境依赖 Python 3.9.7 MySQL 8.0.28 PyMySQL==1.0.2 requests==2.26.0 ## 3.构建流程 - #### 搭建数据库 ``` 运行前,请先自行创建一个名为chat的MySQL数据库,然后运行配套的SQL脚本(./res/chat.sql),以创建数据表、恢复样例数据 ``` - #### 配置数据库 ``` 修改databaseTool.py文件中有关数据库的配置(用户名和密码修改为自己的) ``` - #### 配置机器人robot的apikey(跳过则无法使用机器人相关的聊天服务) ``` 为了增加聊天室的可玩性,本项目调用了图灵机器人的api,由于调用次数有限制,请先将Client.py中send_message()函数里apiKey修改为自己的机器人(若需要获取自己的apiKey,请前往[图灵机器人](http://www.turingapi.com/)的官网进行注册,也可参考相关教程接入其他机器人) ``` - #### 启动服务器 ``` 在服务器上运行Server.py,服务器开始监听端口,并准备处理消息(也可在本地测试) ``` - #### 运行客户端 ``` 在用户端运行Main.py(在本地测试时,可运行多个Main.py,达到模拟多用户的效果) ```
近来智能手机非常流行,一个很久以前的idea在我的脑海里复活——用手机代替现有的PPT翻页器。众所周知,售前人员在给客户讲解PPT时,经常需要远离自己的电脑而走近投影屏幕。这时候讲解就需要用到无线翻页器。因此翻页器(Wireless Presenter)作为一款产品就开始热销了。我是没钱买的,不过既然我们的手机支持编程,支持WIFI,那为什么不自己DIY一个翻页器呢?Let’s Go!   WIFI手机PPT翻页器的原理很简单:手机上的客户端通过无线网络向PC上的服务端发送翻页命令,PC上的服务器程序根据命令,在当前正在播放的 PPT幻灯片上模拟键盘操作。 软件运行环境: PC端:Windows XP/2003/Vista/Win7 + .NetFrameWork 3.5, 手机端:Windows Mobile 6.5 + .Net Compact FrameWork 3.5; 1、软件分为两个部分PC端程序和手机端程序。 2、程序运行之前,请确认手机能和PC机通过Wifi网络正常通讯; 3、必须在PC机的PowerPoint中启动播放幻灯片后,翻页程序才能看到效果; 4、本人手机是HTC Touch T3333,可以实现音量控制键翻页,对与其他设备可能需要修改代码,适当调整或者可以联系我。 软件更新:http://i.isclab.org 涉及到的技术: C# Form编程 C# Socket编程 C# 调用Win32API 枚举窗口 C# 调用Win32API 模拟键盘 C# 调用Win32API Hook拦截键盘 C# 多线程 …… Python版本的程序(PC端)也用到以上类似技术
基于JAVA CS远程监控系统软件的实现(源代码+WORD论文文档论文) 基于JAVA C/S远程监控系统软件的实现 摘 要 近年来,网络技术的不断发展,为远程监控技术的发展创造了条件。远程监控系统软件越来越受到人们的重视,其实用性也毋庸质疑。基于JAVA C/S远程监控系统软件突破了空间的限制,使用者不用亲临,在自己的电脑面前就能轻松的实现对被监控端机器的监控。本系统采用Java网络编程和Java图形编程实现。笔者在开发过程中将网络技术与远程监控理论基础相结合,实现了以下功能:能连续获得被监控端机器屏幕变化;实现被监控端硬盘文件的上传、下载;实现对鼠标、键盘的模拟实现在远程机器上执行任意DOS命令;远程关机、远程重启计算机,方便了用户监视和操作被监控端机器。本系统从系统需求分析、概要设计、详细设计到具体的编码实现和后期的代码优化、功能测试都严格遵循了软件工程的思想。 关键词:远程监控;Java Robot;屏幕截取;Java Socket 系统需求分析及理论基础 2.1 系统需求分析 2.1.1 系统功能需求 1.连续获得被控端机器屏幕变化。 2.实现被控端硬盘文件的上传、下载。 3.实现对鼠标、键盘的模拟。 4.实现在被控端机器上执行任意DOS命令。 5.远程关机、远程重启计算机。 2.1.2 其他需求 1.系统实用,界面操作简便。 2.被监控端自动隐藏运行。 被监控端将随电脑启动而自动运行,运行时默认无任何可见界面。 2.2 系统开发原理及关键技术 2.2.1 系统开发原理 本系统是利用类java.awt.robot中的屏幕截取和鼠标、键盘自动控制功能,然后加上网络传输功能来完成来完成截屏和远程控制的。 2.2.2 系统运行概述 1.启动被监控端,打开指定的UDP端口号。用于读取命令。 2.被监控端读取命令(命令格式为ordername:port)ordername为命令名字,port为主控端打开的TCP端口。 3.接到主控端连接后,被监控端就对当前用户的桌面采用屏幕截取,然后发送给主控端。依被监控端设计的不同,可以设定屏幕截取的时间间隔,时间间隔短一点就可以获得连续屏幕变化了。 4.主控端在画布上对鼠标、键盘事件进行监听,被监控端重演主控端上的事件 5.主控端和被监控端读取和发送数据,分别来实现文件上传和下载。 6.在被监控端实现DOS命令的执行。 2.2.3 系统的关键技术 系统使用的关键技术就是Java网络编程和Java图形编程。用Java网络编程实现主控端和被监控端的通讯(命令收发、数据传送),用Java图形编程完成主控端控制界面的编写。具体应用如下: 1.实现主控端(服务器)与被监控端(客户端)之间的通讯。 ——用Java Socket实现。 2.用Java采集事件,封装成消息,用于发送。 ——在主控端机器上采集事件(一般只不过是键盘和鼠标的事件),然后封装成消息类传输到被监控端。 3.在被监控端上重演主控端的动作事件。 ——在被监控端运行client端,接收消息,如果主控端有请求操作的消息,用Robot截下当前屏幕,传给主控端,主控端显示被监控端的屏幕,是一个位图;然后接收在这个位图上的鼠标事件和键盘事件,并把鼠标位置(位图上的坐标换算成对应的屏幕上的坐标)和键值送到被监控端上,在被监控端上重演同样的事件。 2.3 系统的开发平台 JDK1.5.0,Eclipse3.1,Windows XP Professional 2.3.1 Eclipse介绍 Eclipse是一种可扩展的开放源代码IDE。2001年11月,IBM公司捐出价值4,000万美元的源代码组建了Eclipse联盟,并由该联盟负责这种工具的后续开发。集成开发环境(IDE)经常将其应用范围限定在“开发、构建和调试”的周期之中。为了帮助集成开发环境 (IDE)克服目前的局限性,业界厂商合作创建了Eclipse平台。Eclipse允许在同一IDE中集成来自不同供应商的工具,并实现了工具之间的互操作性,从而显著改

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值