javaudp一个简单java实现udp通信

javaudp  时间:2021-06-18  阅读:()

急求一个关于UDP的JAVA实现多人聊天源代码

import java.io.InputStream; import java.io.DataInputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.DataOutputStream; import java.io.BufferedReader; import .ServerSocket; import .Socket; import java.io.IOException; import java.util.Date; class Server { public Server() { try { ServerSocket s=new ServerSocket(8888); Socket ss=ept(); OutputStream out=ss.getOutputStream(); DataOutputStream dout=new DataOutputStream(out); InputStream in=ss.getInputStream(); DataInputStream din=new DataInputStream(in); System.out.print(din.readUTF()+"!"); dout.writeUTF("你已经连接到服务器"+" "+"你的地址:"+Address()+" " +"你的链接端口:"+ss.getLocalPort()+" "); new ReadMessage(din).start(); new SendMessage(dout).start(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new Server(); } } //接受客户端信息 class ReadMessage extends Thread { private DataInputStream din; public ReadMessage(DataInputStream din) { this.din=din; } public void run() { String str; try { while (true) { str=din.readUTF(); System.out.println(new Date().toLocaleString()+"客户端说:"+str); if (str.equals("bye")) { System.out.println("客户端下线!"); break; } } } catch (IOException e) { e.printStackTrace(); } } } // 发出服务器信息 class SendMessage extends Thread { private DataOutputStream dout; public SendMessage(DataOutputStream dout) { this.dout=dout; } public void run() { InputStreamReader inr=new InputStreamReader(System.in); BufferedReader buf=new BufferedReader(inr); String str; try { while(true) { str=buf.readLine(); dout.writeUTF(str); if (str.equals("bye")) { System.out.println("服务器退出!"); System.exit(1); } } } catch (IOException e) { e.printStackTrace(); } } } import java.io.InputStream; import java.io.DataInputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.DataOutputStream; import java.io.BufferedReader; import .Socket; import java.io.IOException; import java.util.Date; class Client { public Client() { try { Socket s=new Socket("192.168.1.2",8888); InputStream in=s.getInputStream(); DataInputStream din=new DataInputStream(in); OutputStream out=s.getOutputStream(); DataOutputStream dout=new DataOutputStream(out); dout.writeUTF("服务器你好!我是客户端"); System.out.println(din.readUTF()); new Thread(new SenderMessage(dout)).start(); new Thread(new ReaderMessage(din)).start(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { new Client(); } } class ReaderMessage implements Runnable { private DataInputStream din; public ReaderMessage(DataInputStream din) { this.din=din; } public void run() { String str; try { while(true) { str=din.readUTF(); System.out.println(new Date().toLocaleString()+"服务器说:"+str); if (str.equals("bye")) { System.out.println("服务器已经关闭,此程序自动退出!"); break; } } } catch (IOException e) { e.printStackTrace(); } } } class SenderMessage implements Runnable { private DataOutputStream dout; public SenderMessage(DataOutputStream dout) { this.dout=dout; } public void run() { String str; InputStreamReader inf=new InputStreamReader(System.in); BufferedReader buf=new BufferedReader(inf); try { while (true) { str=buf.readLine(); dout.writeUTF(str); if (str.equals("bye")) { System.out.println("客户端自己退出!"); System.exit(1); } } } catch (IOException e) { e.printStackTrace(); } } }

java中如何检测本机指定的UDP服务端口是否被占用?并且自动分配一个可用udp端口;

1.端口占用编译器会报错,可以从错误看出来是不是端口被占用。

没有专门的检测工具和方法 2.DatagramSocket(在Java中使用UDP协议编程的相关类) 用于接收和发送UDP的Socket实例。

该类有3个构造函数: DatagramSocket():通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。

程序会让操作系统分配一个可用的端口。

DatagramSocket(int port):创建实例,并固定监听Port端口的报文。

通常用于服务端 DatagramSocket(int port, Address localAddr):这是个非常有用的构建器,当一台机器拥有多于一个IP地址的时候,由它创建的实例仅仅接收来自LocalAddr的报文。

DatagramSocket具有的主要方法如下: 1)receive(DatagramPacket d):接收数据报文到d中。

receive方法产生一个“阻塞”。

“阻塞”是一个专业名词,它会产生一个内部循环,使程序暂停在这个地方,直到一个条件触发。

 2)send(DatagramPacket dp):发送报文dp到目的地。

 3)setSoTimeout(int timeout):设置超时时间,单位为毫秒。

 4)close():关闭DatagramSocket。

在应用程序退出的时候,通常会主动释放资源,关闭Socket,但是由于异常地退出可能造成资源无法回收。

所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

希望对您有帮助谢谢

java中UDP文件传输怎么实现?

java UDP连接,如果要发送文件的话,你只能自己定义一系列的协议 因为TCP UDP 双方发送都是二进制数据 那么这个实现非常复杂 得不停的发送数据,写数据,建议使用http协议

java 实现 UDP连接的源程序

import java.io.*; import java.lang.*; import .*; public class uclient { private DatagramSocket cli; private DatagramPacket pac; private byte sb[]; private String sen; public uclient() { Init(); } public void Init() { try { //指定端口号,避免与其他应用程序发生冲突 cli=new DatagramSocket(10002); sb=new byte[1024]; sen="UDP方式发送数据"; sb=sen.getBytes(); pac=new DatagramPacket(sb,sb.length,Address.getByName("localhost"),10005); cli.send(pac); } catch(SocketException se) { se.printStackTrace(); } catch(IOException ie) { ie.printStackTrace(); } } public static void main(String args[]) { new uclient(); } } 接收端数据: //加以改进代码,可以改变接收方式 import java.io.*; import java.lang.*; import .*; public class userve { private DatagramSocket ser; private DatagramPacket pac; private byte rb[]; private String rev; public userve() { Init(); } public void Init() { try { ser=new DatagramSocket(10005); rb=new byte[1024]; pac=new DatagramPacket(rb,rb.length); rev=""; int i=0; while(i==0)//无数据,则循环 { ser.receive(pac); i=pac.getLength(); //接收数据 if(i>0) { //指定接收到数据的长度,可使接收数据正常显示,开始时很容易忽略这一点 rev=new String(rb,0,pac.getLength()); System.out.println(rev); i=0;//循环接收 } } } catch(Exception e) { e.printStackTrace(); } } public static void main(String args[]) { new userve(); } }

一个简单java实现udp通信

UDP也可以和TCP那样遍历list然后发送啊 客户端向外面开一个UDP端口接受数据报 然后服务器这边要是有消息要发送就直接发送数据报包就可以了嘛 UDP都不用保持着连接的,比TCP还简单些 另外也可以用组播来实现,搜索下java UDP 组播,你能找到不少实例性的代码,也有聊天室的代码

妮妮云(30元),美国300G防御 2核4G 107.6元,美国高速建站 2核2G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

HostKvm开年促销:香港国际/美国洛杉矶VPS七折,其他机房八折

HostKvm也发布了开年促销方案,针对香港国际和美国洛杉矶两个机房的VPS主机提供7折优惠码,其他机房业务提供8折优惠码。商家成立于2013年,提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。下面列出几款主机配置信息。美国洛杉矶套餐:美国 US-Plan1CPU:1core内存:2GB硬盘...

欧路云:美国200G高防云-10元/月,香港云-15元/月,加拿大480G高防云-23元/月

欧路云 主要运行弹性云服务器,可自由定制配置,可选加拿大的480G超高防系列,也可以选择美国(200G高防)系列,也有速度直逼内地的香港CN2系列。所有配置都可以在下单的时候自行根据项目 需求来定制自由升级降级 (降级按天数配置费用 退款回预存款)。由专业人员提供一系列的技术支持!官方网站:https://www.oulucloud.com/云服务器(主机测评专属优惠)全场8折 优惠码:zhuji...

javaudp为你推荐
存储区域网络什么是存储局域网?组建它需要哪些内容?爱短信官网官方飞信,ET飞信,爱短信飞信插件哪个好用??微信如何只发文字微信朋友圈如何只发文字,怎么发文字不要图java程序员招聘为什么Java程序员工资都很高java程序员招聘java程序员学出来工作好不好找,工资咋样?yui3yui 3 月9日 出的专辑的情报东兴证券网站东兴证券超强版下载,东兴证券超强版v6下载官方网站,东兴证券软件下载cc防火墙服务器里安全狗里的WEB防火墙是什么意思particular教程particular的用法西安娱乐西安最高端会所是哪一家
域名转让 域名主机空间 域名查询工具 万网域名管理 kdata tier 阿里云代金券 北京主机 40g硬盘 宁波服务器 怎样建立邮箱 泉州移动 metalink 优酷黄金会员账号共享 空间服务器 godaddy空间 腾讯网盘 域名和主机 服务器防御 .htaccess 更多