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 组播,你能找到不少实例性的代码,也有聊天室的代码

IMIDC日本多IP服务器$88/月起,E3-123x/16GB/512G SSD/30M带宽

IMIDC是一家香港本土运营商,商家名为彩虹数据(Rainbow Cloud),全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。目前主机商针对日本独立服务器做促销活动,而且提供/28 IPv4,国内直连带宽优惠后每月仅88美元起。JP Multiple IP Customize...

速云:深圳独立服务器,新品上线,深港mpls免费体验,多重活动!

速云怎么样?速云是一家国人商家。速云商家主要提供广州移动、深圳移动、广州茂名联通、香港HKT等VDS和独立服务器。目前,速云推出深圳独服优惠活动,机房为深圳移动机房,购买深圳服务器可享受5折优惠,目前独立服务器还支持申请免费试用,需要提交工单开通免费体验试用,次月可享受永久8折优惠,也是需工单申请哦!点击进入:速云官方网站地址活动期限至 2021年7月22日速云云服务器优惠活动:活动1:新购首月可...

IMIDC彩虹数据:日本站群多ip服务器促销;30Mbps带宽直连不限流量,$88/月

imidc怎么样?imidc彩虹数据或彩虹网络现在促销旗下日本多IP站群独立服务器,原价159美元的机器现在只需要88美元,而且给13个独立IPv4,30Mbps直连带宽,不限制月流量!IMIDC又名为彩虹数据,rainbow cloud,香港本土运营商,全线产品都是商家自营的,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非...

javaudp为你推荐
外国最火开放的直播app手机上看国外电视直播软件哪个好4k超高清视频下载哪里有4K片源下载啊?补充:刚入手了一个4k电视盒,小美盒子V9,说是支持4k。正好我的电视机是4k的,想知道哪里有得下载呢?有朋友说我傻,现在基本上没有4k片源下载,而且不知道什么时候才有。等到流行的时候也许这个机器又淘汰啦!我该怎么办啊?youtube创始人我的世界captainsparklez是谁漏洞查询如何查找漏洞 从那做起怎么用电脑发短信怎么样用电脑给手机发短信?listviewitem怎么获取ListView里Item中的控件pat是什么格式如何把JPG图片变为PAT格式图片?comexception电脑出现ConnectException: 是什么原因?特斯拉model3降价特斯拉model 3中国有补贴吗flex是什么Adobe旗下的软件分别是干什么的?
到期域名查询 便宜vps 万网域名证书查询 美国主机排名 adman BWH la域名 美国便宜货网站 gomezpeer 国外空间服务商 天猫双十一秒杀 一元域名 卡巴斯基永久免费版 777te 165邮箱 服务器维护方案 东莞数据中心 环聊 四川电信商城 太原联通测速 更多