JAVA学习之网络编程UDP篇

DatagramSocket
构造方法摘要,总共有5个构造方法
DatagramSocket()
构造数据报套接字并将其绑定到本地主机上任何可用的端口。

DatagramSocket(DatagramSocketImpl impl)
创建带有指定 DatagramSocketImpl 的未绑定数据报套接字。

DatagramSocket(int port)
创建数据报套接字并将其绑定到本地主机上的指定端口。

DatagramSocket(int port, InetAddress laddr)
创建数据报套接字,将其绑定到指定的本地地址。

DatagramSocket(SocketAddress bindaddr)
创建数据报套接字,将其绑定到指定的本地套接字地址。

常用方法是
close()
关闭此数据报套接字。

receive(DatagramPacket p)
从此套接字接收数据报包。

send(DatagramPacket p)
从此套接字发送数据报包。

其中接收和发送的时候,涉及到类DatagramPacket,
DatagramPacket有6个构造方法,其中常用的两个构造方法是

DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。

DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

基于UDP通信的基本模式,最简单的模式,使用方法步骤如下
1.将数据打包(DatagramPacket),然后发送出去
2.接收别人的发来的数据包(DatagramPacket),然后查看数据包

其中发送数据包时的步骤
(1).使用DatagramSocket()方法创建一个套接字
(2).使用DatagramPacket(byte[] buf, int length, InetAddress address, int port) 打包要发送的数据
(3).使用DatagramSocket类的send(DatagramPacket p) 发送数据包

其中接收数据包时的步骤
(1).使用DatagramSocket(int port) 方法创建一个套接字,其中port说明这个套接节直接绑定到指定端口上
(2).使用DatagramPacket(byte[] buf, int length) 方法创建一个来用接收数据包的数据包
(3).使用DatagramPacket类的receive(DatagramPacket p) 方法为数据包接收数据

注:DatagramPacket与DatagramSocket位于java.net包中,所以使用的时候要记得先
导入这个包,而且在连接创建的过程中会出现各种异常,记得做异常处理

下面写一个练习代码,其中这两个类分别对对方接收和发送信息

其中一个类的代码

//
import java.net.*;
public class UdpA {
    public static void main(String[] args) throws Exception {
        // 其中发送数据包时的步骤
        // (1).使用DatagramSocket()方法创建一个套接字
        // (2).使用DatagramPacket(byte[] buf, int length, InetAddress address, int
        // port) 打包要发送的数据
        // (3).使用DatagramSocket类的send(DatagramPacket p) 发送数据包
        DatagramSocket socket = new DatagramSocket();// 这里可以不用绑定端口,由系统自动分配
        byte[] buf = "您好,我是UdpA,很高兴认识你".getBytes();
        // 我们把数据包要发送到是IP和端口分别是本机的Ip和10000端口
        DatagramPacket packetSend = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);
        socket.send(packetSend);

        //接收数据
        DatagramPacket packetBack = new DatagramPacket(new byte[1024], 1024);
        socket.receive(packetBack);
        System.out.println("对方发来的信息为:" + (new String(packetBack.getData(), 0, packetBack.getLength())));
        socket.close();
    }
}

这个是另一个类的代码

//
import java.net.*;

public class UdpB {

    /**
     * UdpB先接收数据,然后回发数据 连接创建的过程中会出现各种异常,记得做异常处理
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        // 接收数据包时的步骤
        // (1).使用DatagramSocket(int port) 方法创建一个套接字,其中port说明这个套接节直接绑定到指定端口上
        // (2).使用DatagramPacket(byte[] buf, int length) 方法创建一个来用接收数据包的数据包
        // (3).使用DatagramPacket类的receive(DatagramPacket p) 方法为数据包接收数据
        DatagramSocket socket = new DatagramSocket(10000);// 绑定UdpB的端口为10000
        System.out.println("UdpB开启了");
        DatagramPacket packetRecevice = new DatagramPacket(new byte[1024], 1024);
        socket.receive(packetRecevice);

        String ip = packetRecevice.getAddress().getHostAddress();// 取得发送方的IP
        int port = packetRecevice.getPort();// 取得发送方的端口
        String data = new String(packetRecevice.getData(), 0, packetRecevice.getLength());// 取得发送过来的数据
        System.out.println("接收到的数据为:" + data + "       其中发送方的IP为:" + ip + " 端口为:" + port);// 打印接收到的数据

        // 然后再发一个信息到对方
        byte[] msg = "Hello,我就是UdpB哦".getBytes();
        // 根据上面取得的对方的IP和端口,我们把信息反馈回去
        DatagramPacket packetBack = new DatagramPacket(msg, msg.length, InetAddress.getByName(ip), port);
        socket.send(packetBack);

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

}

好吧,一边看书一边看视频,还要一边练代码,进度好慢啊.

时间: 2024-08-24 22:56:33

JAVA学习之网络编程UDP篇的相关文章

Java学习之网络编程实例

转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码

Java学习:网络编程

网络编程 1.1 网络编程基础知识 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机.而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 两类传输协议:tcp和udp TCP是T

【Java学习】网络编程1

网络上两台主机的交互 ①根据IP找到对方主机 ②数据发送到对方指定的应用程序上,为了表示这些应用程序,引入了端口的概念. 常用端口: wed端口80 MySQL端口3306 有效端口 0~65535 ③定义通信规则,称为协议.国际组织定义了通用协议TCP/IP协议 本地回环地址:127.0.0.1(本机不配IP地址的情况下的IP地址)(如果ping这个地址不通,说明网卡有问题)主机名:localhost 常用传输协议:TCP,UDP 网络模型 OSI七层模型:应用层  表示层 会话层 传输层 网

Java学习【网络编程】

博客:http://blog.csdn.net/muyang_ren 发送与接收线程 Recv.java package lhy.socket.server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; public class Recv implements Runnable{ String str = n

java基础学习总结——网络编程

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——网络编程 一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一无二的IP地址,这样互相通信时就不会传错信息了. IP地址是用一个点来分成四段的,在计算机内部IP地址是用四个字节来表示的,一个字节代表一段,每一个字节代表的数最大只能到达255. 六.TCP协议和UD

Java:进阶学习(1)——网络编程

Java:进阶学习(1)--网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket方法 getInetAddress();    远程服务端的IP地址 getPort();    远程服务端的端口 getLocalAddress()    本地客户端的IP地址 getLocalPort()    本地客户端的端口 getInputStream();   

网络版shell之网络编程练习篇--telnet服务端

网络版shell之网络编程练习篇--telnet服务端 以前写过一个shell命令解释器,对与shell命令解释器的执行流程有了清晰的认识,这段时间学习网络编程,至于网络编程的细节以及知识点,已经在上 一遍博客中,转载了从网上摘的文章,基本概括了网络编程的主要api,而对于程序员,更重要的是解决实际问题的能力,所以练习是非常重要的,现在,我们在 一起shell命令解释器的基础上,写一个基于socket网络编程的网络版shell命令解释器,也可以称之为telnet服务端.  telnet服务端代码

《C#网络编程高级篇之网页游戏辅助程序设计(扫描版)》

<C#网络编程高级篇之网页游戏辅助程序设计>通过编写C#网络编程语言中具有代表性的实例,向读者深入细致地讲解了如何利用C#语言进行网页游戏辅助程序设计.本书通过大量的代码引导读者一步步学习和掌握C#的网络应用编程的方法和网页游戏辅助程序的设计技术. <C#网络编程高级篇之网页游戏辅助程序设计>涉及的领域包括多线程编程技术.socket套接字编程.tcp协议编程.http协议编程.远程控制技术.木马技术.模拟键盘和鼠标技术.网页游戏辅助程序设计技术等. <C#网络编程高级篇之网

黑马程序员————java中的网络编程

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- java中的网络编程 一.网络编程概述:基于互联网的编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换. 二.网络模型:OSI和TCP/IP 1.OSI(Open System Interconnection开放系统互连