简介

RT

code

server


package com.kuang; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Created by lee on 2021/4/1.
*/
public class UdpServer {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runnable r1 = new Runnable() { // 发送
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
@Override
public void run() {
// TODO Auto-generated method stub
try {
DatagramSocket ds = new DatagramSocket(9999);
String s = null;
System.out.print("输入:");
while ((s = br.readLine()) != null) {
DatagramPacket dp = new DatagramPacket(s.getBytes(), s.getBytes().length,
InetAddress.getByName("127.0.0.1"), 10000);//广播
ds.send(dp);
if(s.equals("quit")) {
ds.close();
break;
}
// System.out.print("输入:");
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}; Runnable r2=new Runnable() { //接收
@Override
public void run() {
// TODO Auto-generated method stub
try {
DatagramSocket ds=new DatagramSocket(10001);
byte[] buff=new byte[1024];
DatagramPacket dp=new DatagramPacket(buff,buff.length);
while(true) {
ds.receive(dp);
String s = new String(dp.getData(),0,dp.getLength());
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
System.out.println("消息:"+ip+" "+port+" : "+s);
if(s.equals("quit")) {
ds.close();
break;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}; ExecutorService es= Executors.newFixedThreadPool(2);
es.submit(r1);
es.submit(r2); }//main
}

client

package com.kuang;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; /**
* Created by lee on 2021/4/1.
*/
public class UdpClient {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Runnable r1 = new Runnable() { // 发送
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
@Override
public void run() {
// TODO Auto-generated method stub
try {
DatagramSocket ds = new DatagramSocket(10002);
String s = null;
System.out.print("输入:");
while ((s = br.readLine()) != null) {
DatagramPacket dp = new DatagramPacket(s.getBytes(), s.getBytes().length,
InetAddress.getByName("127.0.0.1"), 10001);//广播
ds.send(dp);
if(s.equals("quit")) {
ds.close();
break;
}
// System.out.print("输入:");
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}; Runnable r2=new Runnable() { //接收
@Override
public void run() {
// TODO Auto-generated method stub
try {
DatagramSocket ds=new DatagramSocket(10000);
byte[] buff=new byte[1024];
DatagramPacket dp=new DatagramPacket(buff,buff.length);
while(true) {
ds.receive(dp);
String s = new String(dp.getData(),0,dp.getLength());
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
System.out.println("消息:"+ip+" "+port+" : "+s);
if(s.equals("quit")) {
ds.close();
break;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}; ExecutorService es= Executors.newFixedThreadPool(2);
es.submit(r1);
es.submit(r2); }//main
}

java 聊天 两个进程互相通信开两个线程的更多相关文章

  1. Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号

    1.架构 C/S架构(鼻祖) C:client  客户端 S:server  服务器 早期使用的一种架构,目前的各种app使用的就是这种架构,它的表现形式就是拥有专门的app. B/S架构(隶属于C/ ...

  2. Qt中跨进程Socket通信以及socket跨线程通信

    一 QTcpServer 创建流程 创建套接字服务器 QTcpServer 对象, 通过 QTcpServer 对象设置监听,即:QTcpServer::listen() 基于 QTcpServer: ...

  3. 本地启动服务,两个进程分别监听两个端口,导致两个 URL 不同

    问题描述: 本地启了两个服务:A(http://localhost:8001) B(http://localhost:8000),A 项目要怎么才能关联到 B 项目,也就是 A 项目请求怎么跳到 B ...

  4. Unix系统中,两个进程间的通信

    进程之间通常需要进行数据的传输或者共享资源等,因此进程间需要通讯. 可以通过管道,信号,消息队列,共享内存,信号量和套接字等方式 FIFO表示命名管道,这种管道的操作是基于先进先出原理. PIPE 表 ...

  5. C# 调用Windows API实现两个进程间的通信

    使用Windows API实现两个进程间(含窗体)的通信http://blog.csdn.net/huangxinfeng/article/details/5513608 从C#下使用WM_COPYD ...

  6. linux 两个进程通过 共享内存 通信例子

    例子1:两个进程通过共享内存通信,一个进程向共享内存中写入数据,另一个进程从共享内存中读出数据 文件1 创建进程1,实现功能,打印共享内存中的数据 #include <stdio.h> # ...

  7. [Java聊天室server]实战之五 读写循环(服务端)

    前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识,但学习之前,更 ...

  8. java创建多线程&创建进程

    概述 并发和并行是即相似又有区别: 并行:指两个或多个事件在同一时刻发生: 并发:指两个或多个事件在同一时间段内发生. 进程是指一个内存中运行中的应用程序.每个进程都有自己独立的一块内存空间,一个应用 ...

  9. 2016-2017-2 《Java程序设计》教学进程

    2016-2017-2 <Java程序设计>教学进程 目录 考核方式 课前准备 教学进程 第00周学习任务和要求 第01周学习任务和要求 第02周学习任务和要求 第03周学习任务和要求 第 ...

  10. Java并发编程:进程和线程之由来

    Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...

随机推荐

  1. Sentinel源码—1.使用演示和简介

    大纲 1.Sentinel流量治理框架简介 2.Sentinel源码编译及Demo演示 3.Dashboard功能介绍 4.流控规则使用演示 5.熔断规则使用演示 6.热点规则使用演示 7.授权规则使 ...

  2. AI实战:Text_To_SQL+Prompt+数据库(MySQL)+MCP

    一.Text-to-SQL应用概述 什么是Text-to-SQL?Text-to-SQL也称为NL2SQL,是将自然语言查询转换为可在关系数据库上执行的SQL查询的技术. 其核心目标是准确捕捉并反映用 ...

  3. 判断属性值,选择性执行下一步(get element attribute指令的用法)

    应用场景: 下图线下支付,在退款前需要勾选这种支付方式,否则无法实现支付. 如果在测试脚本内即加入勾选指令,那么在下次执行的时候就会再次勾选,从而造成去除勾选的操作 对比一下勾选前后,勾选框元素内容组 ...

  4. WPF封装一个懒加载下拉列表控件(支持搜索)

    因为项目中PC端前端针对基础数据选择时的下拉列表做了懒加载控件,PC端使用现成的组件,为保持两端的选择方式统一,WPF客户端上也需要使用懒加载的下拉选择. WPF这种懒加载的控件未找到现成可用的组件, ...

  5. 创建mysql容器

    docker run -d  --name node2  -e "container=docker" --privileged=true new/centos_sshd /usr/ ...

  6. 小程序自定义组件 - 插槽slot

    和 vue 的 slot 几乎是一模一样的. 这个学小程序就相当于复习了一把 vue, 还是很值的. 我们之前说组件是页面的一部分, 目的是为了代码复用, 作为组件封装者, 有时候需要设计一些让用户能 ...

  7. 实现高质量视频通话的javascript技巧与方法

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  8. 5 easybr指纹浏览器内存修改教程

    目的 navigator.deviceMemory可以暴露设备的物理内存和运行状态,被用于设备唯一性识别或判断设备等级. 通过伪造这类信息,可以增强防关联.防追踪能力. easybr指纹浏览器提供演示 ...

  9. TenantLineInnerInterceptor源码解读

    一.引言 TenantLineInnerInterceptor是MyBatis-Plus中的一个拦截器类,位于com.baomidou.mybatisplus.extension.plugins.in ...

  10. Nmap 从入门到精通:详细指南

    Nmap 从入门到精通:详细指南 1. Nmap 是什么? Nmap(Network Mapper)是一款开源的网络探测和安全审计工具,广泛用于以下场景: 主机发现:识别网络中的活动设备. 端口扫描: ...