java -> UDP 多线程 的 客户端 和 服务器端

关闭任务管理器的 javaw 进程 可以 关闭之前 通过JAVA 编译 占用的端口 

 

 

服务器端

package main;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
 
class M1
{
    public static void main(String[]a)
    {
    ChatGui c=new ChatGui();
    }
}
//定义聊天窗口
class ChatGui
{
    private Frame f;
    private TextArea t1;
    private TextArea t2;
    private Button b;
    private Thread th;
    ChatGui()
    {
        info();
    }
    public void info()
    {
 
         reThread();//开启接收线程
 
    }
   
    //线程
    public void reThread()
    {
          try
            {
              DatagramSocket recS=new DatagramSocket(10326);
              new Thread(new Rce(recS)).start();
             // DatagramSocket sendS=new DatagramSocket();
             // new Thread(new Sen(sendS)).start();
             
            }
           catch (Exception w)
             {
        	   throw new RuntimeException("创建线程失败");
             }
    }
 
class Rce implements Runnable
{
    private DatagramSocket ds;
    Rce(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        try
        {
            while(true)
            {
                byte[] b=new byte[1024*64];
                DatagramPacket dp=new DatagramPacket(b,b.length); 
                ds.receive(dp); 
                String ip=dp.getAddress().getHostAddress();
                String data=new String(dp.getData(),0,dp.getLength());
                System.out.println(ip+"-----"+data);
            }
        }
        catch (Exception e)
	    {
	        throw new RuntimeException("接受失败");
	    }
    }
}
}

 

 

客户端

package main;

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
 
class M2
{
    public static void main(String[]a)
    {
    ChatGui2 c=new ChatGui2();
    }
}
//定义聊天窗口
class ChatGui2
{
    private Frame f;
    private TextArea t1;
    private TextArea t2;
    private Button b;
    private Thread th;
    ChatGui2()
    {
        info();
    }
    public void info()
    {
         f=new Frame("聊天,不匹配的端口");
         f.setBounds(300,100,500,600);
         f.setResizable(false);
         f.setLayout(new FlowLayout());
         f.setVisible(true);
         t1=new TextArea("",20,60,TextArea.SCROLLBARS_VERTICAL_ONLY);
         t1.setEditable(false);
         t2=new TextArea("",5,50,TextArea.SCROLLBARS_VERTICAL_ONLY);
         b=new Button("发送");
         f.add(t1);
         f.add(t2);
         f.add(b);
         myEvent();
      
 
    }
    public void myEvent()
    {
        f.addWindowListener(new WindowAdapter()
            {
                 public void windowClosing(WindowEvent e)
                   {
                       System.exit(0);
                   }
            });
        b.addActionListener(new ActionListener()
            {
                 public void actionPerformed(ActionEvent e)
                    {
                   seThread();
                   System.out.println(th.getName());//通过测试,这里每次点击发送按钮都会产生新的线程
                    }
            });
 
    }
    //线程
    
    public void seThread()
    {DatagramSocket sendS=null;
    System.out.println("xiancheng");
                          try
                          { 
                               t1.append("我说:"+"\r\n"+t2.getText()+"\r\n");
                             if(sendS==null)
                              sendS=new DatagramSocket();
                             
                               th=new Thread(new Sen(sendS));
                               th.start();  
                               System.out.println(th.isAlive());
                               } 
                               
                          
                          catch (Exception ew)
                           {
                              throw new RuntimeException("xiancheng失败");
                          }
                           
}
 
class Sen implements Runnable
{
    private DatagramSocket ds;
    Sen(DatagramSocket ds)
    {
        this.ds=ds;
    }
    public void run()
    {
        try
          {
         
         
             byte[] b=t2.getText().getBytes();
             System.out.println(t2.getText());
             System.out.println(b.length);
             DatagramPacket dp=new DatagramPacket(b,b.length,InetAddress.getByName("192.168.1.102"),60002);
             System.out.println(dp.getData());
       
             ds.send(dp);
        
            t2.setText("");
         
          }
        catch (Exception e)
          {
             throw new RuntimeException("发送失败");
          }
    }
}
  
}

 

 

 

【Java TCP/IP Socket】UDP Socket(含代码) UDP协议提供的服务不同于TCP协议的端到端服务,它是面向非连接的,属不可靠协议,UDP套接字在使用前不需要进行连接。实际上,UDP协议只实现了两个功能:     1)在IP协议的基础上添加了端口;     2)对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据。     Java通过DatagramPacket类和DatagramSocket类来使用UDP套接字,客户端和服务器 阅读详情

相关推荐

建立简单的服务器端和客户端

基于TCP协议的网络编程 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。 Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的端口并通过Sokcet产生IO流来进行网络通信. ...

weixin_40645193的博客 2073

Java网络多线程——UDP编程

类DatagramSocket和DatagramPacket【数据包/数据报】实现了基于UDP协议网络程序。UDP数据报通过数据报套接字DatagramSocket发送和接收,系统不保证UDP数据报一定能安全送到目的地,也不确信什么时候可以抵达。DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号。UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接。

Wen先森的博客 913

UDP和多线程服务器

UDP: UDP是数据报文传输协议,这个传输协议比较野蛮,发送端不需要理会接收端是否存在,直接就发送数据,不会像TCP协议一样建立连接。如果接收端不存在的话,发送的数据就会丢失,UDP协议不会去理会数据的安全性,而且在网络繁忙、堵塞的时候会丢失一些数据,俗称“丢包”。 但是UDP协议的传输速度很快,基本是你的网络有多快就传输多快。所以游戏、直播、语音电话等功能都是得靠UDP来实现 ,T

l4432321的博客 2675

java实现UDP多线程咨询

首先, 我们需要明白UDP是发送的数据是以数据包的形式发送,无需建立连接,也无需考虑对方是否能够接收到数据。 而我们通过多线程去实现UDP聊天,需要同时执行一个输出数据程序和一个读取用户信息的程序,采用多线程的方式同时执行这两个程序; 为了更好的展示,我们给两个程序都赋上端口号和ip地址。 采用多线程的方式,两个不同的用户同时执行这两个程序,从而达到我们实现UDP聊天。 发送数据: public class SendUdp implements Runnable{ //定义发送的ip地址,.

qq_45979629的博客 1611

java多线程以及java网络编程实现简单的聊天系统

该系统采用java多线程技术及java网络编程技术实现一个基于C/S的聊天系统,系统分为客户端及服务器端: 服务器端主要涉及到以下几个线程: 1.在服务器启动之后会启动一个名为ConnectThread的线程,该线程用来处理用户连接; 2.在服务器启动之后同时会启动一个名为ServerUDP的线程,由名字知道该线程通过UDP进行数据传输的,它是接收用户传过来的消息,并将消息转发给所有在线用户

wei1403121586的专栏 7472

使用Java服务器实现UDP消息的发送和接收(多线程)

详细介绍如何使用Java服务器实现UDP消息的发送和接收(多线程)。欢迎点赞、收藏。谢谢

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 3141

基于UDP实现双工通信(JAVA)(多线程)

写个基础的JAVA网络程序,实现双工通信一个类里两个套接,一个发送,一个接受。两个发送端口未指定,系统随机分配。两个发送打包端口各自指向另一个类里的接受套接。。。。。。。。结束!!!!

m0_57099695的博客 1454

2023最新扫码连wifi-扫码挪车-聚合CPS返利多合一小程序源码

2023最新扫码连wifi-扫码挪车-聚合CPS返利多合一系统 系统特点: 目前已接入的 CPS 渠道: 充值:话费充值、电费充值、影视会员充值、会员卡券充值 本地团购:联联周边游 电商平台:京东、拼多多、唯品会、淘宝、抖音美团:外卖、闪购、酒店、到店、优选饿了么:外卖、商超 出行服务:滴滴打车、滴滴加油、滴滴货运、花小猪打车、高德打车、同程打车 连锁餐饮点餐:肯德基、麦当劳、百果园、奈雪的茶、瑞幸咖啡、星巴克、喜茶、汉堡王、必胜客电影票:特价电影票 注意:以上涉及到需要支付的 CPS 渠道,不需要预存!

qq_41837379的博客 3112

Java的TCP/UDP网络编程+多线程实现服务器端与客户端间的通信

写在前面: Java为网络编程提供了丰富的库,我们能通过调用Socket套接字的方法实现服务器与客户端的双通信。需要注意的是端口的对应,端口可以理解为窗户,服务器只能通过某个端口(窗户)与外界进行数据通信,客户端也如此。 所以 客户端与服务器端的通信就可以理解为服务器端的一个端口<------>客户端的一个端口 (”<--->“代表是全双工通信) 为什么要用多线程? 因为要想客户端和服务器端互相发数据且互不干扰(以在控制台发数据为例),必须让读取键盘输入流为另一个线程,否则

昊月光华的博客 4582

Halcon手眼标定实战:九点标定法从入门到精通(附完整代码)

本文详细介绍了Halcon环境下九点标定法的完整实现流程,从基础概念到实战技巧,帮助开发者快速掌握手眼标定技术。通过精确采集图像坐标与机械坐标,计算仿射变换矩阵,实现相机与机械臂坐标系的精确映射,适用于工业自动化中的平面定位场景。

v4w5x6的博客 411

ThingsBoard入门实战(二):ThingsBoard 设备接入

文章目录ThingsBoard 设备接入一、设备配置/设备类型二、设备三、设备接入HTTPCOAPMQTT四、下一步 ThingsBoard 设备接入 设备接入并不一定需要真正的设备,我们可以通过程序。或者命令来模拟设备,向平台发送信息。 这节我们先为用户分配一个设备,然后通过模拟设备命令更新设备的状态(遥测值)。 一、设备配置/设备类型 添加一个叫"路灯"的设备配置。 设备配置听起来比较抽象,可以认为是设备类型或者是设备类型的配置。实际上,ThingsBoard 中很多时候让选择设备类型,就是选的这个。

AIGC搞起 1万+

【Java网络编程】使用Tcp和Udp实现一个小型的回声客户端服务器程序

利用Java实现网络编程,编写一个小型的Udp和Tcp的回声客户端服务器程序。附带代码和详细的代码解释

yican2580的博客 2289

NRF52832调试方法1——HardFault_Handler问题定位

一、遇到问题 keil debug模式下,直接点击全速运行(Run)发现程序卡死,点击stop按钮后,停到了HardFault_Handler位置,如下图所示。 此时使用navigate backwards(蓝色左箭头)是无效的,找不到程序卡在哪里。 二、解决办法 此时首先观察register窗口 若Stack为MSP,则复制R13(SP)的值到memory观察窗的地址搜索栏。每一行显示连续的28个地址上的存储信息,每个地址上存有一个字节。 从第21个位置起的连续四个字节是LR的值,

小梁的博客 3650

C/S模型:TCP,UDP构建客户端和服务器端(BIO实现)

Java中提供了socket编程来构建客户端和服务器端 构建服务器端的步骤: (1)bind

博客 6105

dToF直方图之美_deadtime死区时间

IMX459的死区时间可以在6ns,这个时间是什么级别,车载激光雷达激光器的光脉宽一般都在4ns以上,也就是这个时间贴近去SPAD的死区时间,这就导致了pile up会非常弱,不会有太多数量的光子计数堆积,加上某些SPAD设计,对TDC有一些更深入的考量,所以不需要去校正pile up算法。Sensor层面决定了pile up的复杂程度,如果一个dToF的SPAD一致性非常好,那么pile up校正可以简单到极致,也就是一句代码的事,比如IMX611,优秀到不需要后端去考虑校正pile up。

dream it possible 1436

AI大模型助力现金流精准预测案例详解

因为它的“注意力机制”能像“人一样思考”——比如,当预测“下周现金流”时,模型会重点关注“最近7天的销售数据”“未来7天的天气”“竞品是否有促销”这些关键因素,而忽略“去年同期的无关数据”。AI大模型不是“取代”财务人员,而是“赋能”他们——把财务人员从“重复的Excel操作”中解放出来,专注于“战略决策”(比如如何优化资金结构、如何提升资金利用率)。比如,“促销力度”这个特征,不是简单的“折扣率”,而是“折扣率×促销天数×覆盖SKU数量”,这样能更准确反映促销对现金流的影响。这些问题的核心,其实是。

AIGC应用创新大全的博客 1258

UDP编程多线程:一(服务器)对多(客户端)关系

服务器端 public class UDPServer02 { public static void main(String [] args){ try { //1、创建服务器端,指定端口号 DatagramSocket socket = new DatagramSocket(8800); System.out.println("***我是服务器端,等待客户端的请求***"); //2、

My_Yes的博客 2905

基于STM32设计自动输液监测系统(241)

该系统集成了液位传感模块、光电传感器、电机模块、按键模块和OLED显示屏等多个功能模块,以实现全面的输液过程监控和控制。液位传感模块能够实时监测输液瓶中的液位,当液位到达限定值时,系统会自动控制步进电机夹紧输液管,并发出报警提醒,确保输液过程不会因液位过低而中断。

1343

基于Java实现PING的服务器端和客户端设计

发送一个request后,最多等待1秒以便接收PingServer返回的reply消息。如果在该时间内没有收到服务器的reply,则认为该请求或对该请求的reply已经丢失;2.4 将用户发送来的请求request在延迟一段随机选择的时间(小于1s)后返回给客户端,作为收到请求的响应reply;已知技术参数和设计要求 1.编程实现PING的服务器端和客户端,实现操作系统提供的ping命令的类似功能。3.3 为每个请求计算折返时间(RTT),统计10个请求的平均RTT、最大/小RTT。能够模拟分组传输延迟;

毕业作品网站 2690

04 HCM CPI SF集成-员工集成(一)

将员工主数据和组织数据从SAP Successfactors Employee CentraI复制到SAPERP或SAP S/4HANA,SAP SF CPI HCM集成

SAP CPI 146

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JAVA中基于UDP实现多线程通信

服务器端程序,利用DatagramSocket负责监听端口,当客户端发过来消息时,服务器端就会响应,并将消息内容保存到Datagrampacket对象中,并且!每一次while循环必须重新创建DatagramPacket对象用于保存消息数据。并将socket,packet对象发送给子线程,由子线程完成后面的事务,主线程将进行下一次循环,在receive(packet)处阻塞监听客户端的响应。

D_inosaur的博客 7750

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

java udp 线程_Java Socket实现基于TCP和UDP多线程通信

一.通过Socket实现TCP编程1.1 TCP编程TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据。基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSocket类。1.2 服务器端套路1.创建ServerSocket对象,绑定监听端口。2.通过accept()方法监听客户端请求。3.连接建立后,通过输入流读取客户端发送的请求信息。4.通过输出流向客户端发...

weixin_33331021的博客 329

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

服务器端多线程与多并发客户端访问UDP(笔记)

1.服务器端对一个客户端的校验 程序说明: 客户端登录,需要输入对应的用户名,密码,输入不成功,继续输入 一个服务端对应一个客户端,单一,输入正确,结束两个程序 ge对用户名,与密码是用数据流进行写出,读入,这样就不会造成读入混乱 例如:zhang123,你不知道从哪里分割开来,无法判断哪部分是用户名 zh,ang123 ; 还是zhan,g123等等 服务器端 public cl...

CleanCode 857

Java Socket实现基于TCP和UDP多线程通信

Java Socket实现基于TCP和UDP多线程通信 一.通过Socket实现TCP编程 1.1 TCP编程   TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据。基于TCP协议实现网络通信的类有客户端的Socket类和服务器端的ServerSocket类。 1.2 服务器端套路   1.创建ServerSocket对象,绑定监听端口。   2.通过accept()方法监听客户端请求。   3.连接建立后,通过输入流读取客户端发送的请求信息。   4.通过输出流向客户端发送响应

丁东的博客 455

C/S模型:TCP,UDP构建客户端和服务器端应用测试

ava中提供了socket编程来构建客户端和服务器端 TCP 构建服务器端的步骤:(1)bind:绑定端口号(2)listen:监听客户端的连接请求(3)accept:返回和客户端连接的实例(4)read/write:进行读写操作,也就是和客户端进行交互(5)close:关闭资源Java中提供了ServiceSocket关键字来构建服务器,在Java中listen和accept合并为一个acc...

weixin_30670965的博客 235
上一篇: java ->新建可视化FORM 并 通过bat 运行
下一篇: Swift -> YSocket 新建 TCP 客户端
mft8899
博客等级 码龄17年 15粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值