当前位置:首页 » 编程语言 » java的udp

java的udp

发布时间: 2023-02-01 04:27:52

1. java 中怎么使用UDP

发送步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。

将数据打包到DatagramPacket中去

通过socket服务发送 (send()方法)

关闭资源

importjava.io.IOException;
importjava.net.*;

publicclassSend{

publicstaticvoidmain(String[]args){

DatagramSocketds=null;//建立套间字udpsocket服务

try{
ds=newDatagramSocket(8999);//实例化套间字,指定自己的port
}catch(SocketExceptione){
System.out.println("Cannotopenport!");
System.exit(1);
}

byte[]buf="Hello,Iamsender!".getBytes();//数据
InetAddressdestination=null;
try{
destination=InetAddress.getByName("192.168.1.5");//需要发送的地址
}catch(UnknownHostExceptione){
System.out.println("Cannotopenfindhost!");
System.exit(1);
}
DatagramPacketdp=
newDatagramPacket(buf,buf.length,destination,10000);
//打包到DatagramPacket类型中(DatagramSocket的send()方法接受此类,注意10000是接受地址的端口,不同于自己的端口!)

try{
ds.send(dp);//发送数据
}catch(IOExceptione){
}
ds.close();
}
}

接收步骤:

使用 DatagramSocket(int port) 建立socket(套间字)服务。(我们注意到此服务即可以接收,又可以发送),port指定监视接受端口。

定义一个数据包(DatagramPacket),储存接收到的数据,使用其中的方法提取传送的内容

通过DatagramSocket 的receive方法将接受到的数据存入上面定义的包中

使用DatagramPacket的方法,提取数据。

关闭资源。

importjava.net.*;

publicclassRec{

publicstaticvoidmain(String[]args)throwsException{

DatagramSocketds=newDatagramSocket(10000);//定义服务,监视端口上面的发送端口,注意不是send本身端口

byte[]buf=newbyte[1024];//接受内容的大小,注意不要溢出

DatagramPacketdp=newDatagramPacket(buf,0,buf.length);//定义一个接收的包

ds.receive(dp);//将接受内容封装到包中

Stringdata=newString(dp.getData(),0,dp.getLength());//利用getData()方法取出内容

System.out.println(data);//打印内容

ds.close();//关闭资源
}
}

2. java udp 请求会阻塞吗

java中UDP通信,两边都接收不了,都是阻塞状态,要先运行UdpServer2,因为它是服务器

3. java中UDP文件传输怎么实现

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

4. java中UDP通信,两边都怎么也接收不了,都是阻塞状态。

你要先运行UdpServer2,因为它是服务器

5. Java udp如何通过一个对象完成接收和发送数据

//注意,本地ip以及端口,广播Ip以及端口,可根据自己的电脑实际情况定.我的三段是2
//思路:我用的udp启动服务端,进行侦听,如果有消息,就该频段广播一次..
//客户端使用多线程,一个发送服务端,一个接受广播..就当我复习了一次...!
importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.InetSocketAddress;
importjava.net.SocketAddress;
importjava.util.Scanner;
publicclassUdpTest{
classSendTest{
privateintcount=1;
privateScannersc;
privatebyte[]by,by2;
privateInetAddressip;
privateSocketAddresssd1,sd2;
privateDatagramSocketds,ds2;
privateDatagramPacketdp,dp2;
SendTest(StringipName,intport)throwsException{
sc=newScanner(System.in);
ip=InetAddress.getByName(ipName);
sd1=newInetSocketAddress(ip,port);//发送的目标:ip+端口
sd2=newInetSocketAddress(19823);//己方,省略ip,默认自己本地地址
ds=newDatagramSocket();//参数为自己的标识
//接受
by2=newbyte[1024];
ds2=newDatagramSocket(sd2);
send();
}
privatevoidsend()throwsIOException{
newThread(){
publicvoidrun(){
while(true){
by=sc.nextLine().getBytes();
dp=newDatagramPacket(by,by.length,sd1);//数组,数组长度,目标ip+端口
try{
ds.send(dp);
}catch(IOExceptione){
e.printStackTrace();
}//推送服务;
System.out.println("老马第:"+count+++"条信息发送完成!");
}
}
}.start();
newThread(){
publicvoidrun(){
while(true){
dp2=newDatagramPacket(by2,by2.length);
try{
ds2.receive(dp2);
System.out.println("老马接受到一条广播可能来自老宋:"+newString(by2,0,dp2.getLength()));
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}.start();
}
}
classAccepTest{
privatebyte[]by;
privateSocketAddresssd1,sd2;
privateDatagramSocketds;
privateDatagramPacketdp;
privateintcount=0;
AccepTest()throwsException{
by=newbyte[1024];
sd1=newInetSocketAddress("192.168.2.255",19823);//广播
sd2=newInetSocketAddress(19822);//己方,省略ip,默认自己本地地址
ds=newDatagramSocket(sd2);//参数为自己的标识,这是用来接受的.....
accepts();
}
privatevoidaccepts()throwsIOException{
while(true){
count++;
System.out.println("老宋的服务器接受第:"+count+"次数据:...");
dp=newDatagramPacket(by,by.length);//数组,数组长度,仅仅用来接收;
ds.receive(dp);//接受服务;
Stringstr=newString(by,0,dp.getLength());
System.out.println("老宋接受到数据--------->"+str);
System.out.println();
//广播..
by=("插个广播:"+str+"....谁发的??").getBytes();
dp=newDatagramPacket(by,by.length,sd1);
ds.send(dp);
}
}
}
publicstaticvoidmain(String[]args)throwsException{
newThread(){
publicvoidrun(){
try{
newUdpTest().newAccepTest();
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
newThread(){
publicvoidrun(){
try{
newUdpTest().newSendTest("127.0.0.1",19822);
}catch(Exceptione){
e.printStackTrace();
}
}
}.start();
}
}

6. JAVA问题 UDP协议中的端口问题

在Java中操纵UDP

使用位于JDK中Java.net包下的DatagramSocket和DatagramPacket类,可以非常方便地控制用户数据报文。

在描述它们之前,必须了解位于同一个位置的InetAddress类。InetAddress实现了Java.io. Serializable接口,不允许继承。它用于描述和包装一个Internet IP地址,通过三个方法返回InetAddress实例:

getLocalhost():返回封装本地地址的实例。

getAllByName(String host):返回封装Host地址的InetAddress实例数组。

getByName(String host):返回一个封装Host地址的实例。其中,Host可以是域名或者是一个合法的IP地址。

DatagramSocket类用于创建接收和发送UDP的Socket实例。和Socket类依赖SocketImpl类一样,DatagramSocket类的实现也依靠专门为它设计的DatagramScoketImplFactory类。DatagramSocket类有3个构建器:

DatagramSocket():创建实例。这是个比较特殊的用法,通常用于客户端编程,它并没有特定监听的端口,仅仅使用一个临时的。

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

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

值得注意的是,在创建DatagramSocket类实例时,如果端口已经被使用,会产生一个SocketException的异常抛出,并导致程序非法终止,这个异常应该注意捕获。DatagramSocket类最主要的方法有4个:

Receive(DatagramPacket d):接收数据报文到d中。receive方法产生一个“阻塞”。

Send(DatagramPacket d):发送报文d到目的地。

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

Close():关闭DatagramSocket。在应用程序退出的? 焙颍?ǔ;嶂鞫?头抛试矗?乇誗ocket,但是由于异常地退出可能造成资源无法回收。所以,应该在程序完成时,主动使用此方法关闭Socket,或在捕获到异常抛出后关闭Socket。

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

DatagramPacket类用于处理报文,它将Byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成Byte数组。应用程序在产生数据包是应该注意,TCP/IP规定数据报文大小最多包含65507个,通常主机接收548个字节,但大多数平台能够支持8192字节大小的报文。DatagramPacket类的构建器共有4个:

DatagramPacket(byte[] buf, int length, InetAddress addr, int port):从Buf数组中,取出Length长的数据创建数据包对象,目标是Addr地址,Port端口。

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port):从Buf数组中,取出Offset开始的、Length长的数据创建数据包对象,目标是Addr地址,Port端口。

DatagramPacket(byte[] buf, int offset, int length):将数据包中从Offset开始、Length长的数据装进Buf数组。

DatagramPacket(byte[] buf, int length):将数据包中Length长的数据装进Buf数组。

DatagramPacket类最重要的方法就是getData()了,它从实例中取得报文的Byte数组编码。

7. 用Java编写简单的UDP网络通信程序

Java中封装了大量的socket API 为编写网络通信程序提供了极大的方便 在计算机网络的学习中 大家都已熟练掌握了TCP/UDP的基本原理 在此不在赘述 仅给出接收端和发送端的源代码 供大家讨论学习 发送端代码如下:import java io *;import java lang *;import *;public class uclient{private DatagramSocket cli;private DatagramPacket pac;private byte *** [];private String sen;public uclient(){Init();}public void Init(){try{//指定端口号 避免与其他应用程序发生冲突cli=new DatagramSocket( ); *** =new byte[ ];sen= UDP方式发送数据 ; *** =sen getBytes();pac=new DatagramPacket( *** *** length InetAddress getByName( localhost ) );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( );rb=new byte[ ];pac=new DatagramPacket(rb rb length);rev= ;int i= ;while(i== )//无数据 则循环{ser receive(pac);i=pac getLength();//接收数据if(i> ){//指定接收到数据的长度 可使接收数据正常显示 开始时很容易忽略这一点rev=new String(rb pac getLength());System out println(rev);i= ;//循环接收}}}catch(Exception e){e printStackTrace();}}public static void main(String args[]){new userve();}} lishixin/Article/program/Java/hx/201311/26023

8. java 怎么用UDP实时接收数据

我自己写的代码:

importjava.io.IOException;
importjava.net.DatagramPacket;
importjava.net.DatagramSocket;
importjava.net.InetAddress;
importjava.net.SocketException;
importjava.net.UnknownHostException;
publicclassUdpRecvDemo
{

publicstaticvoidmain(String[]args)throwsIOException
{
Recv();
}

publicstaticvoidRecv()throwsIOException
{
System.out.println("接受开始......");
DatagramSocketds=newDatagramSocket(3388);
while(true)
{
byte[]buf=newbyte[1024];
DatagramPacketdp=newDatagramPacket(buf,buf.length);
ds.receive(dp);
System.out.println(ds);
Stringip=dp.getAddress().getHostAddress();
intport=dp.getPort();
Stringtext=newString(dp.getData(),0,dp.getLength());
if(text.equals("exit"))
{
System.out.println(ip+"退出会话......");
break;
}
System.out.println(ip+":"+port+"===>me"+text);
}

ds.close();
}
}
热点内容
链接sqlserver 发布:2024-05-20 04:27:53 浏览:208
ftp文件服务器扩容 发布:2024-05-20 04:22:21 浏览:645
linux心跳包 发布:2024-05-20 04:17:52 浏览:969
android打开数据库文件 发布:2024-05-20 04:16:07 浏览:571
塑料解压 发布:2024-05-20 03:50:09 浏览:75
python在服务器端开发 发布:2024-05-20 03:31:17 浏览:66
编程大冒险 发布:2024-05-20 03:19:27 浏览:637
阿瓦隆九个人怎么配置 发布:2024-05-20 02:57:47 浏览:758
sqlnotinexcept 发布:2024-05-20 02:53:10 浏览:342
激光切割编程教程难吗 发布:2024-05-20 02:49:57 浏览:926