--------------------------------------网络编程(UDP)

InetAddress类
java.net包中的InetAddress类用于封装IP地址和DNS。要创建InetAddress类的实例。可以使用工厂方法,因为此类没有可用的的构造方法。
InetAddress类中的工厂方法
static InetAddress getLocalHost();//返回表示本机InetAddress对象
static InetAddress getByName(String hostName);//为主机名为hostName的主机返回InetAddress对象
static InetAddress[] getAllByName(String hostName);为主机名为hostName的所有可能主机返回InetAddress对象组
如果不能找到主机,两种方法都能抛出UnknownHostNameException异常。
输出本地主机的地址信息
class InetAddressTest(){
public static void main(String args[]){
try{
IneAddress add=IneAddress.getLocalHost();
System.out.println("本机的主机地址是:"+add);
}
catch(UnkonwnHostNameException){
//此处省略代码}

}

}
基于UDP协议的Socket编程
基于TCP协议的网络通信是安全、双向的,UDP协议的网络通信就不一样了,只需要指明对方写地址,然后将数据传送出去,并不事先连接。
这样的网络通信数据是不安全的,应用场合如聊天系统,咨询系统等。
学习UDP之前先要了解一个术语“数据报”,数据报是表示通信的一种报文类型,使用数据报进行通信时,无需事先建立连接这个过程,他是基于UDP协议
进行的。
Java中有两个可使用数据报实现通信的类,即DatagramPacket和DatagramSocket.DatagramPacket类起到数据容器的作用,DatagramSocket用于发送和接收DatagramPacket.
Datagram类不提供发送或接收数据的方法,而DatagramSocket类则提供send()方法和receive()方法,用于通过套接字发送和接收数据报。
1.DatagramPacket类
1)构造方法
DatagramPacket类封装了数据报的数据、数据长度、目标地址和目标端口。客户端要向外发送数据,必须首先创建一个DatagramPacket对象,在使用DatagramSocket发送。
DatagramPacket类常用的构造方法如下:
DatagramPacket(byte[] date,int size)//构造DatagramPacket对象,封装长度为size的数据报
DatagramPacket(byte[] buf,int length,InetAddress address ,int port)//构造DatagramPacket对象,封装长度为length的数据报及发总指定的主机、端口号。
2)常用法法
byte[] getDate();//返回一个字节数组,该数组包含接收到或要发送的数据报中的数据
int getLength()//返回发送或接收的数据长度
InetAddress getAddress();//返回一个发送或接收此数据的主机IP地址
int getPort();//返回发送或接收此数据的主机端口号
2.DatagramSocket类
1)构造方法
DatagramSocket类不维护连接状态,不产生输入/输出数据流,他的唯一作用就是结束和发送DatagramPacket对象封装好的数据报。常用的DatagramSocket类的构造方法:
DatagramSocket()//创建一个DatagramSocket对象,并将其与本地主机上任何可用端口绑定
DatagramSocket(int port)//创建一个DatagramSocket对象,并将其与本地指定的端口绑定
2)常用的方法
void connect(InetAdress address ,int port)//将当前DatagramSocket对象连接到远程地址的指定端口
void close();//关闭当前DatagramSocket对象
void disconnect()//断开当前DatagramSocket对象的连接
int getLocalPort()//返回当前DatagramSocket对象绑定的本地主机端口号
void send(DatagramPacket p)//发送指定的数据报
void receive(DatagramPacket p)//接收数据报。收到数据以后,存放在指定的DatagramPacket对象中

3)基于UDP协议的Socket网络编程一般按照以下4个步骤进行:

(1)利用DatagramPacket对象进行封装数据报。

(2)利用DatagramSocket对象发送数据报。

(3)利用DatagramSocket对象接收数据报。

(4)利用DatagramPacket对象处理数据报。

4)模拟客户咨询功能,实现发送咨询问题,接收方接收并显示发送过来的咨询问题,发送方发送咨询问题,接收方回应咨询

 /**
     * 服务器端
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        //创建DatagramPacket对象,用来准备接收数据报
        byte[]buf=new byte[1024];
        DatagramPacket dp =new DatagramPacket(buf, 1024);
        //创建DatagramSocket对象用来接收数据
        DatagramSocket ds=new DatagramSocket(8800);
        ds.receive(dp);
        //显示接收到的信息
        String str =new String(dp.getData(), 0, dp.getLength());
        System.out.println(dp.getAddress().getHostAddress()+"说:"+str);
        //向客户端发送响应信息
        String reply ="你好,我在,请咨询";
        //显示本地对话框
        System.out.println("我说:"+reply);
        //创建DatagramPacket对象
        SocketAddress sa = dp.getSocketAddress();
        DatagramPacket dpto=new DatagramPacket(reply.getBytes(), reply.getBytes().length, sa);
        ds.send(dpto);
/**
     * 客户端
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

        String mess="你好,我想咨询一个问题。";
        //获取主机本地地址
        InetAddress ia = InetAddress.getByName("localhost");
        //创建DatagramPacket对象,封装数据
        DatagramPacket dp=new DatagramPacket(mess.getBytes(), mess.getBytes().length,  ia, 8800);
        //创建DatagramSocket对象向服务器发送数据
        DatagramSocket ds=new DatagramSocket();
        ds.send(dp);
        //接收服务端的响应
        byte[]buf=new byte[1024];
        DatagramPacket dpre =new DatagramPacket(buf, buf.length);
        ds.receive(dpre);
        //显示接收到的信息
        String string =new String(dpre.getData(), 0, dpre.getLength() );
        System.out.println(dpre.getAddress().getHostAddress()+"说:"+string);

        //关闭DatagramSocket对象
        ds.close();

    }


    }
时间: 2024-10-12 19:40:49

--------------------------------------网络编程(UDP)的相关文章

黑马程序员 网络编程 UDP与TCP

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ----------------------/* 网络编程分为两种模式:TCP和UDP 连接互联网的计算机以亿计,为了唯一的标识出每台电脑,互联网就给每台电脑分配一个 唯一独立的ip地址,通过这个ip地址就可以进行计算机之间的数据交换 我们计算机交换的数据功能我们在java中把它封住成一个叫Socket的类, 简称套接字, 端口号:计算机数据的交换一般都是电脑上的程序来维护的,而电脑上又运

网络编程UDP Demo

package 网络编程UDP; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] args) { DatagramSocket ds = null; try { // 创建客户端的

网络编程UDP Demo1

!!!这是循环打印的输入的内容,如果要循环输入的话,一定要记得切换线程来输入,要不不管用的 package 网络编程UDP; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPClient { public static void main(String[] arg

c/c++ 网络编程 UDP 发送端 bind 作用

网络编程 UDP 发送端 bind 作用 upd 发送端 调用bind函数的效果:把socket特定到一个指定的端口,如果不调用bind,内核会随机分配一个端口. upd 发送端 调用bind函数的目的:假如有2个发送端,接收端需要识别是从哪个发送端过来的,就可以分别在发送端调用bind函数,这样一来,接收端就能够知道是哪个发送端过来的数据了. 运行方法:先运行[1,先接收再发送],再运行[2,先发送再接收] 1,先接收再发送: #include <stdio.h> #include <

c/c++ 网络编程 UDP 改变网卡的硬件地址

网络编程 UDP 改变网卡的硬件地址 在程序里动态改变网卡的硬件地址 1,取得网卡的硬件地址 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <

c/c++ 网络编程 UDP 改变网关和网卡名字

网络编程 UDP 改变网关和网卡名字 在程序里动态改变网关和网卡名字 1,改变网卡名字 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net

c/c++ 网络编程 UDP 改变IP地址

网络编程 UDP 改变IP地址 在程序里动态改变主机的IP地址 1,改变ipv4的地址 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net

网络编程UDP/TCP协议

一.网络编程三要素 IP:网络中设备的标识,不易记忆,可用主机名 端口号:用于标识进程的逻辑地址,不同进程的标识 传输协议:通讯的规则常见协议:TCP,UDP UDP 把数据打成一个数据包 , 不需要建立连接 数据包的大小有限制不能超过64k 因为无连接,所以属于不可靠协议(可能丢失数据) 因为无连接 ,所以效率高 TCP 需要建立连接,形成连接通道 数据可以使用连接通道直接进行传输,无大小限制 因为有链接,所以属于可靠协议 因为有链接,所以效率低 二.IP以及端口号 1.InetAddress

java 网络编程 UDP TCP

网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: 就是要基于html页面的基础上进行数据的交互的. 比如: 珍爱网. oa(办公自动化). 高考的报告系统... 计算机网络: 分布在不同地域 的计算机通过外部设备链接起来达到了消息互通.资源共享的效果就称作为一个计算机网络.网络通讯的三要素:    1. IP    2. 端口号.    3. 协

JAVA网络编程UDP案例

Java网络编程.UDP案例 发送端 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 SendUDP { public static vo