在上一篇了解完网络通信的基本概念之后,本章节为了解Tomcat的基本逻辑方便以后对

UDP:(发短信,不管是否能接受成功都会发送)

//发送端
//不需要连接服务器
public static void main(string[] args)throws Exception {
//1.建立一个socket
DatagramSocket socket=new Datagramsocket();
//2.建个包
String msg ="你好啊,服务器!";
InetAddress localhost = InetAddress.getByName("localhost");
int port = 9090;
// 数据,数据的长度起始,要发送给谁
DatagramPacket, packet = new DatagramPacket(msg.getBytes(), offset: 0, msg.getBytes().length, localhost, port);
//3.发送包
socket.send(packet);
//4.关闭流
socket.close();
//接收端
public static void main(string[] args)throws Exception {
//开放端口
Datagramsocket socket=new Datagramsocket(9090);
// 接收数据包
byte[ buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
//阻塞接收
socket.receive(packet);
system.out.printin(packet.getAddress().getHostAddress());
System.out.printin(new string(packet.getData(),0,packet.getLength()));
//关闭连接
socket.close();
}

UDP:建立聊天通话(建立连接成功才能发送,但服务端只能接受消息不能回复消息)

//发送端
public static void main(string[] args)throws Exception {
DatagramSocket socket = new DatagramSocket( port: 8888);
//准备数据:控制台读取
system.inBufferedReader reader = new BufferedReader(new InputstreamReader(System.in));
while(true){
String data=reader.readLine();
byte[] datas = data.getBytes();
DatagramPacket packet = new Datagrampacket(datas, 0,datas.length,new InetsocketAddress(hostname: "localhost", 6666);
socket.send(packet);
if(data.equals("bye")){
break;
}
socket.close();
//接收端
public static void main(string[l args)throws Exception {
Socket socket=new DatagramSocket( port:6666);
while(true){
/准备接收包裹
byte[] container = new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
//阻赛式接收包表
socket.receive(packet);
//断开连接
byte[] data = packet.getData();
String receiveData = new string(data, offset: 0, data.length);
System.out.println(receiveData);
if(receiveData.equals("bye")){
break;
}
socket.close();

UDP(打电话,双方都可发送接收,用到了多线程)

//发送端
public class TalkSend implements Runnable{
DatagramSocket socket =null;
BufferedReaderreader = null;
private int fromPort;
private string toIp;
private int toPort;
//建立有参构造
public Talksend(int fromPort, string toIP, int toPort){
this.fromPort = fromPort;
this.toIp = toIP;
this.toPort = toPort;
try {
socket = new DatagramSocket(fromPort);
reader = new BufferedReader(new InputStreamReader(System.in));
}catch(Exception e){
e.printstackTrace();
}
} @0verride
public void run(){
while(true){
try {
String data=reader.readLine();
byte[] datas =data.getBytes();
DatagramPacket packet = new Datagrampacket(datas,0,datas.length,new InetsocketAddress(this.toIp,this.toPort));
socket.send(packet);
if(data.equals("bye")){
break;
}catch(Exception e){
e.printstackTrace();
}
}
socket.close();
}
//接收端
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(socketException e){
e.printstackTrace();
}
} @Override
public void run(){
while(true){
//淮备接收包褰
try{
byte[] container =new byte[1024];
DatagramPacket packet = new DatagramPacket(container,0,container.length);
//阻塞式接收包表
socket.receive(packet);
//断开连接 bye
byte[] data= packet.getData();
String receiveData=new String(data,0, data.length);
System.out.println(msgFrom +":"+receiveData);
if(receiveData.equals("bye")){
break;
}catch(IoException e){
e.printstackTrace();
}
}
socket.close();
}

实现A B用户之间建立通讯互相发送信息

调用A
public class Talkstudent {
public static void main(string[]args){
//开启两个线程
new Thread(new TalkSend(7777,"localhost",9999)).start();
new Thread(new TalkReceive(8888,"老师")).start();
}
调用B
public static void main(string[] args){
new Thread(new Talksend(5555,"localhost",8888)).start();
new Thread(new TalkReceive(9999,"学生")).start();

Tomcat通信概念篇的更多相关文章

  1. 【转帖】H5 手机 App 开发入门:概念篇

    H5 手机 App 开发入门:概念篇 http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html 作者: 阮一峰 日期: 2019年 ...

  2. 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 百篇博客分析OpenHarmony源码 | v24.01

    百篇博客系列篇.本篇为: v24.xx 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源 | 51.c.h .o 进程管理相关篇为: v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内 ...

  3. 【转】android 电容屏(二):驱动调试之基本概念篇

    关键词:android  电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung ...

  4. TOMCAT ---> servlet概念

    1 TOMCAT ---> servlet概念 2 TOMCAT 目录结构 (各个文件夹都存放什么东西) 3 TOMCAT 程序的层级 web | |---- js,jsp,html,css ( ...

  5. 我的TDD实践---TDD概念篇

    “我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  6. DNA拷贝数变异CNV检测——基础概念篇

    DNA拷贝数变异CNV检测——基础概念篇   一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...

  7. 【黑金原创教程】 FPGA那些事儿《概念篇》

    简介一本讲述非软硬片上系统的书,另外还是低级建模的使用手册. 目录[黑金原创教程] FPGA那些事儿<概念篇>:File01 - 结构的玩笑[黑金原创教程] FPGA那些事儿<概念篇 ...

  8. 常见面试题整理--Python概念篇

    希望此文可以长期更新并作为一篇Python的面试宝典.每一道题目都附有详细解答,以及更加详细的回答链接.此篇是概念篇,下一篇会更新面试题代码篇. (一).这两个参数是什么意思:*args,**kwar ...

  9. Linux Capabilities 入门教程:概念篇

    原文链接:Linux Capabilities 入门教程:概念篇 Linux 是一种安全的操作系统,它把所有的系统权限都赋予了一个单一的 root 用户,只给普通用户保留有限的权限.root 用户拥有 ...

  10. Java实现IO通信(服务器篇)

    Java实现IO通信(服务器篇) 如何利用java实现我们的通信呢?首先我们了解一下什么是通信?通信的机制是怎样的? 首先来讨论一下什么是通信?通信,指人与人或人与自然之间通过某种行为或媒介进行的信息 ...

随机推荐

  1. 在单机条件下,MPI4PY与纯Python多进程代码来比较是否有性能优势???

    如题: 最近在看MPI4PY的代码,但是发现这东西除了编写简洁外(少量代码实现复杂的多进程通信,包括单机和多机),好像也没有别的太多功能,当然MPI本身在多机通信广播.规约上做的很成熟,但是假设我们只 ...

  2. 2024年Apache DolphinScheduler RoadMap:引领开源调度系统的未来

    非常欢迎大家来到Apache DolphinScheduler社区!随着开源技术在全球范围内的快速发展,社区的贡献者 "同仁" 一直致力于构建一个强大而活跃的开源调度系统社区,为用 ...

  3. Apache SeaTunnel社区5月月报更新!

    各位热爱 SeaTunnel 的小伙伴们,社区 5 月份月报来啦! SeaTunnel 正在迅猛发展,积极投入社区项目建设的小伙伴将促进SeaTunnel不断提升数据同步的高可扩展性.高性能及高可靠性 ...

  4. Floyd判联通(传递闭包) & poj1049 sorting it all out

    Floyd判联通(传递闭包) Floyd传递闭包顾名思义就是把判最短路的代码替换成了判是否连通的代码,它可以用来判断图中两点是否连通.板子大概是这个样的: for(int k=1; k<=n; ...

  5. 需要多久才能看完linux内核源码?

    代码中自由颜如玉!代码中自有黄金屋! 一.内核行数 Linux内核分为CPU调度.内存管理.网络和存储四大子系统,针对硬件的驱动成百上千.代码的数量更是大的惊人. 先说说最早的内核linux 0.11 ...

  6. 使用Kiota工具生成WebApi的代理类,以及接口调用的简单体验

    前言 当前.NET环境下,生成WebApi代理类的工具已经有很多选择了,比如OpenApi Generator,NSwag和Refitter等,不同的工具生成的代码风格以及实现方式略有不同,比如Ref ...

  7. 用GDI+旋转多边形来绘制一个时钟摸拟小程序

    效果图 在头文件类中声明变量 TCHAR m_dayStr[4]; // 日期 TCHAR m_weekStr[4]; // 星期 Gdiplus::Font* m_pFont; // 字体 Gdip ...

  8. Win32 拆分窗口

    前两天学习了MFC的拆分窗口,今天来学习Win32 SDK下如何拆分窗口. win32是没有像MFC那样直接有函数方法拆分窗口,只能自己处理了. 1.在WM_CREATE消息中创建两个控件,TreeV ...

  9. Linux 常见编辑器

    命令行编辑器 Vim Linux 上最出名的编辑器当属 Vim 了.Vim 由 Vi 发展而来,Vim 的名字意指 Vi IMproved,表示 Vi 的升级版.Vim 对于新手来说使用比较复杂,不过 ...

  10. Pandas从入门到放弃

    公众号本文地址:https://mp.weixin.qq.com/s/mSkA5KvL1390Js8_1ZBiyw Pandas简介 Pandas是Panel data(面板数据)和Data anal ...