精华内容
下载资源
问答
  • java udp 简单实现

    2021-02-25 19:44:50
    java udp 简单实现------代码:* 运行方法:直接 运行 UdpTest.java 的 main 函数 即可,* udp serverpackage eric.j2se.net.udp;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net....

    java udp 简单实现

    ------

    代码:

    * 运行方法:

    直接 运行 UdpTest.java 的 main 函数 即可,

    * udp server

    package eric.j2se.net.udp;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetSocketAddress;

    import java.nio.ByteBuffer;

    /**

    * udp server

    *

    * @author eric

    * @date 2011-2-20 下午05:05:55

    */

    public class UdpServer implements Runnable {

    private int port;

    public UdpServer(int port) {

    this.port = port;

    }

    public void run() {

    try {

    // listening at port for udp request

    DatagramSocket server = new DatagramSocket(new InetSocketAddress(port));

    byte[] bs = new byte[4];

    ByteBuffer bbuf = null;

    DatagramPacket data = new DatagramPacket(bs, bs.length);

    server.setSoTimeout(1000 * 10); // set timeout

    while (true) { // 一直监听

    server.receive(data);

    bbuf = ByteBuffer.wrap(bs, 0, 4);

    String s = "receive " + data.getData().length + " byte data,value: " + bbuf.getInt();

    System.out.println(s);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    public static void main(String[] args) {

    new Thread(new UdpServer(11111)).start();

    }

    }

    * udp client

    package eric.j2se.net.udp;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetSocketAddress;

    /**

    * udp client

    *

    * @author eric

    * @date 2011-2-20 下午05:15:05

    */

    public class UdpClient implements Runnable {

    private int port;

    public UdpClient(int port) {

    this.port = port;

    }

    public void run() {

    try {

    DatagramSocket client = new DatagramSocket();

    byte[] bs = new byte[4];

    InetSocketAddress isa = new InetSocketAddress("localhost", port);

    DatagramPacket data = new DatagramPacket(bs, bs.length);

    data.setSocketAddress(isa);

    for (int i = 0; i < 10; i++) {

    data.setData(int2bytes(i));

    client.send(data);

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    static byte[] int2bytes(int num) {

    byte[] b = new byte[4];

    for (int i = 0; i < 4; i++) {

    b[i] = (byte) (num >>> (24 - i * 8));

    }

    return b;

    }

    }

    * test

    package eric.j2se.net.udp;

    /**

    * test udp

    *

    * @author eric

    * @date 2011-2-20 下午05:43:06

    */

    public class UdpTest {

    public static void main(String[] args) throws InterruptedException {

    int port = 11111;

    new Thread(new UdpServer(port)).start();// start udp server,listen request

    new Thread(new UdpClient(port)).start();// start udp client,send data

    }

    }

    *

    ------

    分享到:

    18e900b8666ce6f233d25ec02f95ee59.png

    72dd548719f0ace4d5f9bca64e1d7715.png

    2011-02-20 18:36

    浏览 9879

    评论

    展开全文
  • Java UDP连接

    2021-03-21 09:08:14
    我正在使用Netbeans IDE尝试在客户端和服务器之间建立UDP连接,这是一个简单的程序,UDPClient将字符串发送到UDPServer,服务器将字符串大写并将其发送回客户端.我做了客户端和服务器端在一个单独的项目中.我的客户端...

    我正在使用Netbeans IDE尝试在客户端和服务器之间建立UDP连接,这是一个简单的程序,UDPClient将字符串发送到UDPServer,服务器将字符串大写并将其发送回客户端.我做了客户端和服务器端在一个单独的项目中.

    我的客户端UDPClient的类代码:

    package udpclient;

    import java.io.*;

    import java.net.*;

    public class UDPClient {

    public static void main(String[] args) throws IOException{

    //get input from user

    BufferedReader user_in = new BufferedReader(

    new InputStreamReader(System.in));

    //create udp socket connection

    DatagramSocket socket = new DatagramSocket();

    //creat buffers to process data

    byte[] inData = new byte[1024];

    byte[] outData = new byte[1024];

    //get ip destination wanted

    InetAddress IP = InetAddress.getByName("localhost");

    //read data from user

    System.out.println("Enter Data to send to server: ");

    outData = user_in.readLine().getBytes();

    /*

    * make pkts for interaction

    */

    //send pkts

    DatagramPacket sendPkt = new DatagramPacket(outData, outData.length, IP, 9876);

    socket.send(sendPkt);

    //receive pkts

    DatagramPacket recievePkt = new DatagramPacket(inData, inData.length);

    socket.receive(recievePkt);

    System.out.println("Replay from Server: "+recievePkt.getData());

    }

    }

    和我的服务器端类UDPServer:

    package udpserver;

    import java.io.*;

    import java.net.*;

    public class UDPServer {

    public static void main(String[] args) throws IOException{

    // TODO code application logic

    //connection

    DatagramSocket socket = new DatagramSocket();

    //pkt buffers

    byte[] inServer = new byte[1024];

    byte[] outServer = new byte[1024];

    //receive pkt

    DatagramPacket rcvPkt = new DatagramPacket(inServer,inServer.length);

    socket.receive(rcvPkt);

    //display receive

    System.out.println("Packet Received!");

    //retrive pkt info to send response to same sender

    InetAddress IP = rcvPkt.getAddress();

    int port = rcvPkt.getPort();

    //process data

    String temp = new String(rcvPkt.getData());

    temp = temp.toUpperCase();

    outServer = temp.getBytes();

    //send response packet to sender

    DatagramPacket sndPkt = new DatagramPacket(outServer, outServer.length, IP, port);

    socket.send(sndPkt);

    }

    }

    make计数程序正常运行并且不输出错误.服务器根本没有收到数据包,它没有与客户端交互.为什么会这样?

    解决方法:

    您尚未在服务器中指定任何侦听端口,因此服务器会侦听随机可用端口.

    在服务器端试试这个

    DatagramSocket socket = new DatagramSocket(9876);

    标签:udp,java,sockets,netbeans,network-programming

    来源: https://codeday.me/bug/20190609/1205075.html

    展开全文
  • java UDP传输

    2021-02-12 14:23:30
    直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对象就是DatagramSocket. 封装了udp传输协议的socket对象。因为数据包中包含的信息较多,为了操作这些信息方便,也一样会将其封装成对象...

    ①:只要是网络传输,必须有socket 。

    ②:数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息。

    直接操作udp不可能,对于java语言应该将udp封装成对象,易于我们的使用,这个对象就是DatagramSocket. 封装了udp传输协议的socket对象。

    因为数据包中包含的信息较多,为了操作这些信息方便,也一样会将其封装成对象。这个数据包对象就是:DatagramPacket.通过这个对象中的方法,就可以获取到数据包中的各种信息。

    DatagramSocket具备发送和接受功能,在进行udp传输时,需要明确一个是发送端,一个是接收端。

    udp的发送端:

    ①:建立udp的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未被使用的端口。

    ②:明确要发送的具体数据。

    ③:将数据封装成了数据包。

    ④:用socket服务的send方法将数据包发送出去。

    ⑤:关闭资源。

    udp的接收端:

    ①:创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。

    ②:定义数据包,用于存储接收到数据。

    ③:通过socket服务的接收方法将收到的数据存储到数据包中。

    ④:通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。

    ⑤:关闭资源。

    Eg:

    发送端(客户端)

    import java.net.*;

    class  UdpSend{

    public static void main(String[] args)throws Exception {

    // 1,建立udp的socket服务。

    DatagramSocket ds = new DatagramSocket(8888);//指定发送端口,这个可以不指定,系统会随机分配。

    // 2,明确要发送的具体数据。

    String text = "udp传输演示 哥们来了";

    byte[] buf = text.getBytes();

    // 3,将数据封装成了数据包。

    DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("10.1.31.127"),10000);

    // 4,用socket服务的send方法将数据包发送出去。

    ds.send(dp);

    // 5,关闭资源。

    ds.close();

    }

    }

    接收端(服务器端)

    import java.net.*;

    class UdpRece {

    public static void main(String[] args) throws Exception{

    // 1,创建udp的socket服务。

    DatagramSocket ds = new DatagramSocket(10000);//必须指定,并且和上面的端口号一样!

    // 2,定义数据包,用于存储接收到数据。先定义字节数组,数据包会把数据存储到字节数组中。

    byte[] buf = new byte[1024];

    DatagramPacket dp = new DatagramPacket(buf,buf.length);

    // 3,通过socket服务的接收方法将收到的数据存储到数据包中。

    ds.receive(dp);//该方法是阻塞式方法。

    // 4,通过数据包的方法获取数据包中的具体数据内容,比如ip,端口,数据等等。

    String ip = dp.getAddress().getHostAddress();

    int port = dp.getPort();

    String text = new String(dp.getData(),0,dp.getLength());//将字节数组中的有效部分转成字符串。

    System.out.println(ip+":"+port+"--"+text);

    // 5,关闭资源。

    ds.close();

    }

    }

    练习:

    通过键盘录入获取要发送的信息。

    将发送和接收分别封装到两个线程中。

    package july76net;

    //一个聊天的例子,利用UDP传输协议

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;

    //客户端,发送端

    class Send implements Runnable {

    private DatagramSocket ds;

    public Send(DatagramSocket ds) {

    super();

    this.ds = ds;

    }

    @Override

    public void run() {

    try {

    BufferedReader br = new BufferedReader(new InputStreamReader(

    System.in));//数据源是键盘录入

    String line;

    while ((line = br.readLine()) != null) {

    byte[] buf = line.getBytes();

    DatagramPacket dp = new DatagramPacket(buf, buf.length,

    InetAddress.getByName("localhost"), 10225);

    ds.send(dp);

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    }

    // 服务器端,接收端

    class Rece implements Runnable {

    private DatagramSocket ds;

    public Rece(DatagramSocket ds) {

    super();

    this.ds = ds;

    }

    @Override

    public void run() {

    try {

    while (true) {

    byte[] buf = new byte[1024];

    DatagramPacket dp = new DatagramPacket(buf, 0, buf.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) {

    e.printStackTrace();

    }

    }

    }

    public class Demo6 {

    public static void main(String[] args) throws Exception {

    DatagramSocket sendDs = new DatagramSocket();

    DatagramSocket receDs = new DatagramSocket(10225);

    new Thread(new Send(sendDs)).start();

    new Thread(new Rece(receDs)).start();

    }

    }

    输出:

    你好

    127.0.0.1     你好

    你好

    127.0.0.1     你好

    展开全文
  • 零、发现问题用Java写了个UDP收发程序,发现中文有问题!package socket;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net...

    零、发现问题

    用Java写了个UDP收发程序,发现中文有问题!

    package socket;

    import java.io.IOException;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;

    import java.net.SocketException;

    import java.net.UnknownHostException;

    public class send {

    /**

    * 发送UDP数据

    * @param args

    */

    public static void main(String[] args) {

    String str = "hello 这是一个JavaUDP实例!";

    DatagramSocket socket = null;

    try {

    socket = new DatagramSocket();//创建数据包套接字

    DatagramPacket packet = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("127.0.0.1"), 7217);//构建数据包

    socket.send(packet);//发送数据包

    socket.close();//关闭套接字

    } catch (SocketException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }catch (UnknownHostException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }finally {

    if(socket!=null) {

    socket.close();//关闭套接字

    }

    }

    }

    }

    package socket;

    import java.io.IOException;

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;

    import java.net.SocketException;

    public class recive {

    static int port = 7217;//监听的端口

    /**

    * 接收UDP数据

    * @param args

    */

    public static void main(String[] args) {

    DatagramSocket socket = null;

    try {

    socket = new DatagramSocket(port);//开始监听端口

    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建缓存区

    socket.receive(packet);//接收数据,这里阻塞

    byte[] dataArray = packet.getData();//获取收到的数据

    int portSend = packet.getPort();//获取发送的端口

    InetAddress address = packet.getAddress();//获取发送的地址

    int length = packet.getLength();//获取数据的长度

    System.out.println(

    "地址:"+address.getHostAddress()

    +"\n端口:"+portSend

    +"\n数据:\t"

    + "长度:"+dataArray.length+"\n"

    + "\t内容:"+new String(dataArray,0,length));//显示内容

    socket.close();//关闭套接字

    } catch (SocketException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }finally {

    if(socket!=null) {

    socket.close();//关闭套接字

    }

    }

    }

    }

    一、显示不全

    c23b0dde445b6036c325dd6abb997b09.png

    解决方法:把发送端的

    DatagramPacket packet = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("127.0.0.1"), 7217);//构建数据包

    修改为

    DatagramPacket packet = new DatagramPacket(str.getBytes(), str.length(), InetAddress.getByName("127.0.0.1"), 7217);//构建数据包

    总结:收发双方应统一使用

    str.getBytes().length

    获取长度

    二、显示乱码

    556c0e91192a8b5baf3a3fc0824cdcc9.png

    解决方法:使用统一编码

    发送端的

    DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 7217);//构建数据包

    修改为

    DatagramPacket packet = new DatagramPacket(str.getBytes(), str.getBytes("UTF-8").length, InetAddress.getByName("127.0.0.1"), 7217);//构建数据包

    接收端的

    System.out.println(

    "地址:"+address.getHostAddress()

    +"\n端口:"+portSend

    +"\n数据:\t"

    + "长度:"+dataArray.length+"\n"

    + "\t内容:"+new String(dataArray,0,length));//显示内容

    修改为

    System.out.println(

    "地址:"+address.getHostAddress()

    +"\n端口:"+portSend

    +"\n数据:\t"

    + "长度:"+dataArray.length+"\n"

    + "\t内容:"+new String(dataArray,0,length,"UTF-8"));//显示内容

    总结:收发双方String在跟Byte数组转换时应该指定编码

    三、收到很多方块

    在解决第二个问题的时候,出现过这种问题:

    21c57a730644a3b45276d5aea1d5b2a6.png

    是因为一开始从Byte转到String时指定了编码没有指定长度

    new String(dataArray,"UTF-8");

    指定一下长度就可以了

    new String(dataArray,0,length,"UTF-8");

    四、总结

    基本上乱码都是跟编码有关或者转换的时候收发双方处理不一致造成的。在以后的开发中需要注意!

    展开全文
  • java UDP IP设置

    2021-02-26 20:19:01
    importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjava.net.*;importjava.util.*;importjavax.swing.*;publicclassHostComputer1extendsJFrameimplementsActionListen...import java.io.*;import jav...
  • 题目:假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。具体如下:(1)、Tom和Jerry聊天的双方都应该具有发送端和接收端;(2)、利用DatagramSocket与DatagramPacket;(3)、实现 java.lang.Runnable类,重写 ...
  • java udp地址匹配

    2021-03-09 22:52:10
    public static boolean regexUdpUrl(String url){if (url == null)return ...Pattern pattern = Pattern.compile("[udp]+[://]+((\\d){1,})+\\.((\\d){1,})+\\.((\\d){1,})+\\.((\\d){1,})+:((\\d){1,})");Matche...
  • Java udp socket编程

    2021-02-12 22:50:42
    本文仅实现了客户端发送字符串到服务端,服务端将其转换为大写,再发送给服务端Java 比c++简单明了得多,直接看代码就可以弄懂了。服务端import java.io.IOException;import java.net.DatagramPacket;import java...
  • java udp 端口

    2021-03-25 09:45:51
    场景:JAVA(UDP编程中)获取目前机器的空闲端口号JAVA(UDP编程中)获取当前机器的空闲端口号在项目中需要获取当前机器的空闲端口号.查阅资料实现如下:// 获取通信端口号public static int getPort() {DatagramSocket s...
  • java udp接收16进制乱码

    2021-04-17 05:50:48
    java udp接收16进制乱码[2021-01-30 09:27:24]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可...
  • Java UDP 数据报

    2021-02-12 20:21:41
    public class DatagramClientTest { public static void main(String[] args) throws IOException { //创建UDP的Socket InetAddress serverAddr = InetAddress.getByName("192.168.0.101");//目的主机IP地址 ...
  • importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;public classSender {public static voidmain(String[] args) {try{//创建发送方的套接字,IP默认为本地,端口号随机...
  • UDP不像TCP那样专门提供了一个SERVER端API,所有的都用DatagramSocket,接受packet数据报。所以说UDP是无连接的,因为所有的链接都是在数据报里,让DatagramSocket去发送。Server端:import java.net.DatagramPacket...
  • 项目总结22:Java UDP Socket数据的发送和接收1-先上demo客户端(发送数据)packagecom.hs.pretest.udp;importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net....
  • 找了网上通用的UDP程序,当用字符串发送时如"1234567890",我这边接到显示的也有"1234567890",然而,当那边用16进制发时,我收到的是:"4vx3F"每两个字节为一组输出,且当数据中第一位...找了网上通用的UDP程序,当用...
  • UDP通讯udp 是一种网络通信协议,不需要客户端和服务器端建立连接即可进行通讯功能。相对于Tcp协议它有着tcp用很多优点,例如广播功能。udp的广播功能可以指定特定网段进行广播内容,而无需知道接收者是谁,只有接受...
  • 忙了两天的androidudp穿洞(JAVA),任然存在一些奇怪的现象,为什么模拟器之间的穿洞能够成功,而PC服务器向模拟器发送的信息却在延时之后不能够收到,明明抓包显示含有需要的udp到达...忙了两天的android udp穿洞...
  • Java UDP 实现模拟Ping程序 服务端 import java.net.DatagramPacket; import java.net.DatagramSocket; import java.nio.charset.StandardCharsets; public class UdpPingService { public static void main...
  • java UDP操作实例源码介绍,DatagramSocket 类要收发DatagramPacket必须打开一个数据报socket ,当服务器构造DatagramSocket时。1.1服务器和客户端的服务器两者使用的socket都是一样的,区别仅仅在于 服务器端的端口...
  • I need to build a UDP server which can handle ~10_000 requests/sec. Started with below code, to test whether a java socket can handle those number of requests.I am bombarding the server for a minute w...
  • java UDP server端接收消息会有上次的消息DatagramSocketserverSocket=newDatagramSocket(8888);byte[]receiveData=newbyte[1024];DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);...
  • import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * Udp 单播方式示范 */ public class UdpDemo { public static void main...
  • package ...import java.io.IOException;import java.io.InputStream;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.util.Properties;...
  • 我以前经常写的是基于TCP的网络编程,由于TCP建立连接鼻血要经过三次握手连接,...(注意:UDP是基于数据报为单位进行传输的,而TCP是一种基于流进行传输的)但是UDP很好的模拟了我们呢平时聊天的方式,可以很好的实现...
  • Java UDP 重发机制

    2021-02-25 18:25:26
    一、重发消息有两个原因:①接收方未收到,此时重发是应该的。②接收方收到消息但是发...为了UDP包不在IP层上被分片,所以设计UDP包每个不得大于以太网的MTU.采用相互握手重发二、直接看代码public void run() {try...
  • UDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP...
  • 一【实验目的】 掌握基于多线程的复杂网络程序的开发方法和开发流程; 按照要求设计实现软件,以培养应用复杂计算系统开发的能力,并在设计...1-1 假设Tom和Jerry利用Java UDP进行聊天,请为他们编写程序。具体如下:
  • 今天来实现一个UDP发送消息的代码,本次只写了发送端发送,接收端接受,没有实现双向 来看一下发送端 import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import ...
  • import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; //RSA非对称加密算法工具类 public class RSA { private ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 122,189
精华内容 48,875
关键字:

javaudp

java 订阅