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

CloudCone中国春节优惠活动限定指定注册时间年付VPS主机$13.5

CloudCone 商家产品还是比较有特点的,支持随时的删除机器按时间计费模式,类似什么熟悉的Vultr、Linode、DO等服务商,但是也有不足之处就在于机房太少。商家的活动也是经常有的,比如这次中国春节期间商家也是有提供活动,比如有限定指定时间段之前注册的用户可以享受年付优惠VPS主机,比如年付13.5美元。1、CloudCone新年礼物限定款仅限2019年注册优惠购买,活动开始时间:1月31...

触碰云高性价20.8元/月,香港云服务器,美国cn2/香港cn2线路,4核4G15M仅115.2元/月起

触碰云怎么样?触碰云是一家成立于2019年的商家。触碰云主营香港/美国 VPS服务器、独立服务器以及免备案CDN。采用的是kvm虚拟构架,硬盘Raid10,Cn2线路,去程电信CN2、移动联通直连,回程三网CN2。最低1核1G带宽1M仅20.8元/月,不过这里推荐香港4核4G15M,香港cn2 gia线路云服务器,仅115.2元/月起,性价比还是不错的。点击进入:触碰云官方网站地址触碰云优惠码:优...

新加坡云服务器 1核2Gg 46元/月 香港云服务器 1核2G 74元/月 LightNode

LightNode是一家成立于2002年,总部位于香港的VPS服务商。提供基于KVM虚拟化技术.支持CentOS、Ubuntu或者Windows等操作系统。公司名:厦门靠谱云股份有限公司官方网站:https://www.lightnode.com拥有高质量香港CN2 GIA与东南亚节点(河内、曼谷、迪拜等)。最低月付7.71美金,按时付费,可随时取消。灵活满足开发建站、游戏应用、外贸电商等需求。首...

javaudp为你推荐
4k超高清视频下载为新手推荐几个获取4K片源的途径郭列90后的杰出代表有那些?全局钩子加载全局钩子是什么,每次进入股票软件都说加载全局钩子,是中病毒了吗yui3yui 3 月9日 出的专辑的情报ocr软件下载哪个图片转文字软件比较好用?彩信平台目前国内有哪些短信平台服务商,怎么排名?怎样删除聊天记录怎么批量清除微信聊天记录在线操作系统什么是计算机操作系统?其作用主要有哪些网页背景音乐代码网页背景音乐代码,我要哪怕转换网页都不间断的那种ibooks支持什么格式iPhone4的ibooks怎么导入电子书 还有支持什么格式
美国网站空间 传奇服务器租用 欧洲免费vps qq云存储 老鹰主机 cve-2014-6271 mach5 patcha 12306抢票助手 大容量存储 java虚拟主机 天互数据 圣诞促销 谁的qq空间最好看 100m空间 hostloc 亚马逊香港官网 重庆双线服务器托管 华为云盘 便宜空间 更多