网络编程05:我终于模拟出了QQ聊天——基础篇

本篇文章主要用UDP基础知识来模拟两人聊天

需求分析

设计一个程序,实现两人聊天,两人可以相互发信息,接收对方的信息,以及退出聊天

设计分析

一个人既可以发送信息也可以接收信息——多线程**

给这个人设置两个线程,一个接收信息的线程,一个发送信息的线程,建立两个运行终端,执行这两个线程即可
这里设置了两个角色:老师和学生

package UDP多线程在线咨询;public class TalkStudent {public static void main(String[] args) {//开启两个线程new Thread(new TalkSend(7777,"localhost",9999)).start();//学生的发送消息线程new Thread(new TalkReceive(8888,"老师")).start();//接收来自老师的消息线程}
}
package UDP多线程在线咨询;public class TalkTeacher {public static void main(String[] args) {new Thread(new TalkSend(5555,"localhost",8888)).start();new Thread(new TalkReceive(9999,"学生")).start();}
}

线程设计

发送消息线程设计

发送消息线程
1.建立一个socket连接
2.建立输入流,读取控制台信息
3.循环发送信息模块设计:读控制台信息,建立Pocket,发送出去,设置结束发送消息判断条件
4.释放资源

重写run()方法,循环发送信息模块应该是run()方法里

package UDP多线程在线咨询;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;//run()方法重写,要确定按一部分应该是run()方法,应该是发送消息那个模块是run()方法
public class TalkSend implements Runnable{DatagramSocket socket=null;BufferedReader reader=null;private int scorePort;//源端口private String desIP;//目的地址private int desPort;//目的端口public TalkSend(int scorePort, String desIP, int desPort) {this.scorePort = scorePort;this.desIP = desIP;this.desPort = desPort;//建立sockettry{socket=new DatagramSocket(scorePort);reader=new BufferedReader(new InputStreamReader(System.in));}catch (Exception e){e.printStackTrace();}}@Overridepublic void run() {while (true){try {String data=reader.readLine();byte[] readData=data.getBytes();DatagramPacket packet = new DatagramPacket(readData, 0, readData.length, new InetSocketAddress(this.desIP, this.desPort));socket.send(packet);if(data.equals("bye")){break;}}catch (Exception e){e.printStackTrace();}}socket.close();}}

接收消息线程设计

接收消息线程
1.建立socket连接
2.循环接收信息模块设计:建立Pocket,接收信息,输出接收到的数据,设置结束接收消息判断条件
3.释放资源

重写run()方法,循环接收信息模块应该是run()方法里

package UDP多线程在线咨询;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;public class TalkReceive implements Runnable{DatagramSocket socket=null;private int port;private String msgFrom;public TalkReceive(int port,String msgFrom) {this.port = port;this.msgFrom=msgFrom;try {socket = new DatagramSocket(port);}catch (Exception e){e.printStackTrace();}}@Overridepublic void run() {while (true){try {byte[] receiveData=new byte[1024];DatagramPacket packet = new DatagramPacket(receiveData, 0, receiveData.length);socket.receive(packet);//输出接收到的数据byte[] data= packet.getData();String receiveData2=new String(data,0,packet.getLength());System.out.println("收到"+msgFrom+"发送来的信息:"+receiveData2);//断开连接if (receiveData2.equals("bye")){break;}} catch (IOException e) {e.printStackTrace();}}socket.close();}
}

建立连接

学生发送消息,目的端口号是老师接收消息的端口号,目的IP地址就写本机地址localhost
new Thread(new TalkSend(7777,"localhost",9999)).start();//学生的发送消息线程
学生接收消息,设置学生接收消息端口号
new Thread(new TalkReceive(8888,"老师")).start();//接收来自老师的消息线程

老师发送消息,目的端口号是学生接收消息的端口号,目的IP地址就写本机地址localhost
new Thread(new TalkSend(5555,"localhost",8888)).start();
老师接收消息,设置老师接收消息端口号
new Thread(new TalkReceive(9999,"学生")).start();

运行结果

学生端
绿色是学生发送的消息,白色是学生接收的消息
绿色是学生发送的消息,红色是学生接收的消息
老师端
绿色是老师发送的消息,白色是老师接收的消息
绿色是老师发送的消息,白色是老师接收的消息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55856.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程大作业-聊天室

前言: 大二时候完成的网络编程大作业,用C\C语言写的一款简易聊天室。目前一个服务器只能连两个客户端,两个以上的我搞不出来。也可以在三台电脑操作,只要输入服务器的IP地址就行了。 使用的编译器:VS2010、VS2019 演…

第7课 阿布拉卡达布拉《小学生C++趣味编程》

#include<iostream> using namespace std; int main() {int a,b,t; a10;b20; cout<<"a"<<a<<" b"<<b<<endl; //输出交换前a,b的值 ta;ab;bt;cout<<"a"<<a<<" b"<<b&l…

新学期Flag已立,期待期末给自己一份满意的答卷

新的学期开始了&#xff0c;在此借助CSDN的此次征文活动&#xff0c;为自己制定新学期计划&#xff0c;立下小小的flag&#xff0c;希望在新的学期里和大家一起加油&#xff01; 一、自我介绍 研一新生一枚&#xff0c;目前正在学习神经网络以及Python&#xff0c;同时对前端…

小学生C++趣味编程 2023 01 05 测试

2023 01 05 测试题 初赛 一、单项选择题&#xff08;共20 题&#xff0c;每题 1.5 分&#xff0c;共计 30 分&#xff1b;每题有且仅有一个正确选项&#xff09; 1. 一个 32 位整型变量占用&#xff08; &#xff09;个字节。 A. 4 B. 8 C. 32 D. 128 2. 二进制数 11.…

《新学期,新Flag》乘风破浪

一、自我介绍 经常摆烂的大三学长&#xff0c;计算机专业&#xff0c;准备努力往上爬&#xff0c;一步一步的超越我前面的人&#xff0c;把他们狠狠的甩到后面。 二、新学期目标 1&#xff0c;好好学习 制定学习目标/找一个学习的榜样 熟悉各种编程软件的打开和关闭&#x1f…

小学生C++趣味编程 2023 01 08 测试

单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。 9. 设字符串S”Olympic”&#xff0c;S的非空子串的数目是&#xff08; &#xff09;。 A. 28 B. 29 C. 16 D. 17 10&#xff0e;W…

荣耀X40,X30,X20,X10,荣耀70,荣耀60 安装谷歌套件谷歌服务框架GMS,Google Play商店

你可能认为华为和荣耀分家之后&#xff0c;荣耀手机就可以安装Play商店,安装服务框架谷歌。但实际上即使荣耀手机和华为分家之后&#xff0c;也是不可以继续使用Play商店&#xff0c;荣耀最新发售的X40(GT,i,se,max)&#xff0c;包括以前的X30&#xff0c;X20&#xff0c;X10&a…

最新2021修复安装了谷歌框架GMS后华为/荣耀手机FCM推送服务仍不能用的问题(Microsoft Authenticator微软验证器在安装了Google服务后还是提示不可用)

简介 Firebase Cloud Messaging (FCM) 是 Google Cloud Messaging (GCM) 的升级版&#xff0c;是一种便于在移动应用和服务器应用程序之间进行消息传递的云推送服务。详细了解 目前大部分华为/荣耀手机在安装了谷歌框架GMS后&#xff0c;FCM推送服务仍然处于不可用状态&#…

支持华为荣耀HarmonyOS鸿蒙2.0系统安装谷歌服务框架play商店GMS的工具介绍,也开始支持其他安卓设备安装谷歌套件

华谷套件支持华为荣耀几乎全系列HarmonyOS鸿蒙2.0系统安装谷歌服务框架play商店GMS,主要支持华为荣耀安装华谷套件,现在也开始支持其他安卓国产手机小米,vivo,oppo,魅族,联想…,支持mate30/40 pro系列,p10,p20,p40,p50,xs2,nova5 6 7 8,9,play,荣耀30/40/50/magic系列/9x/10…解…

荣耀畅玩7x(BND-TL10移动版)刷LineageOS 19 GSI

BND-TL10刷 Lineage OS 19 引言步骤1.升级当前手机官方系统到最高支持的版本2.准备LineageOS rom3.刷入LineageOS4.结束&#xff0c;Happy 分享本文相关资源 引言 Generic System Image(GSI&#xff1a;通用系统映像)&#xff0c;相关知识请百度 本文将带领你在荣耀畅玩7x手机…

华为或者荣耀手机使用谷歌有Google弹窗该怎么办?

完成安装后。首先 进入设置 —应用管理 —搜索Google 点开右上角点击显示应用程序 这里我们只需要对Google服务框架&#xff0c;商店&#xff0c;服务这三个进行设置。 在断网的情况下&#xff0c;注意一定要在断网的情况下进行下面的操作。 Google服务框架和Googlepaly商店里…

【华为鸿蒙3.0/荣耀安卓12使用VMOS Pro的激活方式 方法二】

关于华为鸿蒙3.0/荣耀安卓12如何解除进程限制&#xff0c;这里提供以下教程供小伙伴们参考。 需要准备&#xff1a;电脑一台&#xff0c;数据线一根。 第一步&#xff1a;安装华为手机助手/荣耀手机助理&#xff0c;并通过激活程序包&#xff08;vmos_activation.zip&#xff0…

华为荣耀所有系列手机,如何安装谷歌应用框架?

以前一直用的小米Note&#xff0c;安装谷歌应用框架只能够刷海外版的MiUI&#xff0c;非常的耗费时间。 本来一直还想用小米来着&#xff0c;因为不知道华为可以如此轻松的安装谷歌应用&#xff0c;当得知可以配置时&#xff0c;毫不犹豫的买了华为&#xff0c;赞&#xff01; …

Charles手机安装教程(荣耀手机亲测)

Android安装Charles证书&#xff08;荣耀手机测试&#xff09; 1、 通过Charles获取证书Charles的Help选项–>SSL proxying–>Save Charles Root Certificate出现弹框 注意保存文件的格式&#xff01; 把证书(即 crt 文件)传到手机存储&#xff08;QQ,微信等方式&…

Postgre SQL连接服务器失败

首先这是登陆postgre sql时提示的错误信息&#xff1a; psql: 无法联接到服务器: Connection refused (0x0000274D/10061) 服务器是否在主机 "localhost"(::1) 上运行并且准备接受在端口5432 上的 TCP/IP 联接?无法联接到服务器: Connection refused (0x0000…

chatgpt赋能python:Python快捷指令–提升你的编程效率

Python快捷指令 – 提升你的编程效率 在Python编程中&#xff0c;快捷指令是一个非常重要的概念。快捷指令是指通过简单的键盘操作来执行特定的功能或命令&#xff0c;从而提高编程效率。在这篇文章中&#xff0c;我们将介绍一些最常用和最有用的Python快捷指令&#xff0c;帮…

GitHub Copilot 键盘快捷( 试用 )

使用 根据注释生成代码根据上下文自动填充代码代码翻译算法生成测试用例结果输出代码优化可以使用 q: 向Copilot提问&#xff0c;就像使用ChatGPT一样&#xff0c;可以帮助我们阅读代码 这些只是gpt的一部分能力&#xff0c;通过这些应用场景熟悉gpt,然后再扩展使用场景&#…

python制作超炫流星雨代码,python制作超炫流星雨表

这篇文章主要介绍了python制作超炫流星雨表白源代码&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1、小学题一个轮一个星叫什么 一个轮一个星叫做流星雨。流星雨又称为流星…

我的作文题目是——《我的区长父亲》

1、你有哪些印象深刻的高考记忆&#xff1f; 只记得当时早交了卷&#xff0c;想早点回家&#xff0c;结果只能出考场&#xff0c;不能出楼&#xff0c;就在楼道里溜达&#xff0c;迎面遇见了班主任&#xff0c;“哟&#xff0c;你咋还出来了”&#xff0c;我说&#xff1a;我想…

计算机一级证书英文 简历,通用于计算机英文简历范文

通用于计算机英文简历范文 2019-08-23 版权声明 举报文章 Sep.xxxx—Jul.xxxx Computer Science Dept. of Computer College, Northeast Normal University. Courses taken include: data structure, principle of database, principle of compiling, principle of computers, …