简介

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. px转rem适配方案之postcss-pxtorem

    一.安装 npm install postcss-pxtorem --save-dev 二.增加postcss.config.js文件 在目录文件下增加postcss.config.js并添加相关配置 ...

  2. python,数据拼接举例

    request请求参数data =  '{"TwitterId":123456,"SupperId":0}' data内的123456,实际是个变量,且数据来源 ...

  3. php和thinkphp实现页面调转

    1.原生PHP https://www.cnblogs.com/jade640/p/7118565.html 2.thinkPHP跳转方法及重定向 https://blog.csdn.net/Wake ...

  4. kubelet 创建 Pod 前发生了什么?

    Kubelet Watch 到新增的 Pod,需要做的主要有以下几件事: 管理 Pod 状态,除了更新本地缓存,还要同步给 API server 计算节点的资源是否足够创建 Pod 创建 Cgroup ...

  5. 关于.net 和 JAVA 在内存处理(GC)设计上的差距(ChatGPT水文)

    我听说,java 在内存方面,有线程专用的堆空间,从而加快内存分配和回收的速度(因为没有并发的考虑?),是这样的吗? .net 有类似的技术吗? 是的,Java确实有线程专用的堆空间,即Thread ...

  6. df -h命令卡住 怎么办

    df -h命令卡住 命令行输入df -h却发现一直卡在那里,有可能是挂载出了问题. 这种问题,大概率是由于 mount 的目录被删除了,但是没有提前执行 umount 操作,因此报错! 解决方法: 1 ...

  7. 【代码】Android|判断asserts下的文件存在与否,以及普通文件存在与否

    作者版本:Android 11及以上 主要是发现网上没有完整的.能跑的代码,不知道怎么回事,GPT给我重写的.我只能保证这个代码尊嘟能跑,不像其他的缺胳膊少腿的. asserts 贴一下结果: boo ...

  8. 如何清理误提交到git的历史大文件?

    前言 哈喽!好久不见~ 最近在思考转型的事情,好久没有更新文章了 不过看到我之前开发的视频剪辑工具 Clipify 收获了不少 star ,让我想起之前画的饼似乎才实现了一点点,所以利用了周末的空闲时 ...

  9. 1+2+...+n

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.cas ...

  10. 基于Scikit-learn与Flask的医疗AI糖尿病预测系统开发实战

    引言 在精准医疗时代,人工智能技术正在重塑临床决策流程.本文将深入解析如何基于MIMIC-III医疗大数据集,使用Python生态构建符合医疗AI开发规范的糖尿病预测系统.项目涵盖从数据治理到模型部署 ...