Java网络编制程序航天科工

UDP通信的兑现

一.DatagramSocket:用于发送或收取数据包

当服务器要向客户端发送数据时,需求在劳动器端发生1个DatagramSocket对象,在客户端产生3个DatagramSocket对象。服务器端的DatagramSocket将DatagramPacket发送到网络上,然后被客户端的DatagramSocket接收。

DatagramSocket有二种构造函数。1种是无需任何参数的,常用于客户端。另壹种必要钦赐端口,常用来服务器。

常用方法:send、receive、 close

 

二.DatagramPacket:数据容器(封包)的功力

常用方法:构造函数、getAddrress(获取发送或接收方总括机的IP地址)、getData(获取发送或收取的数据)、setData(设置发送的数量)

3.UDP通讯编制程序基本步骤:

a)成立客户端的DatagramSocket,创立时,定义客户端的监听端口

b)成立服务器端的DatagramSocket,创造时,定义服务器端的监听端口

c)在劳动器端定义DatagramPacket对象,封装待发送的数据包。

d)服务器端将数据包发送出去

e)客户端接收数据包

【示例壹】客户端与服务器端单向通信之客户端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetSocketAddress;

public class Client {

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

       byte[] b = “aaaa”.getBytes();

        //必须告诉数据包要发到何地去

       DatagramPacket dp = new DatagramPacket(b,b.length,new  
InetSocketAddress(“localhost”,8999));

       //作者自个儿占用八千端口向外侧机器发数据包

       DatagramSocket ds = new DatagramSocket(9000);

       ds.send(dp);

       ds.close();

    }

【示例贰】客户端与服务器端单向通讯之服务器端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

public class Server {

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

       DatagramSocket ds = new DatagramSocket(8999);

       byte[] b = new byte[1024];

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

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

       String string = new   String(dp.getData(),0,dp.getLength()); 
  //dp.getLength()重返实际吸收的多寡的字节数

       System.out.println(string);

       ds.close();

    }

}

通过ByteArrayInputStream、ByteArrayOutputStream可以传递基本项目数据。

【示例3】客户端

public class Client {

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

       long n = 2000L;

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

       DataOutputStream   dos = new   DataOutputStream(bos);

       dos.writeLong(n);

       byte[] b = bos.toByteArray();

       //必须告诉数据包要发到哪个地方去

       DatagramPacket dp = new DatagramPacket(b,b.length,new  
InetSocketAddress(“localhost”,8999));

       //小编本身占用九千端口向外界机器发数据包

       DatagramSocket ds = new DatagramSocket(9000);

       ds.send(dp);

       ds.close();

    }

【示例四】服务器端

public class Server {

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

       DatagramSocket ds = new DatagramSocket(8999);

       byte[] b = new byte[1024];

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

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

       ByteArrayInputStream   bis = new  
ByteArrayInputStream(dp.getData());

       DataInputStream   dis = new   DataInputStream(bis);

       System.out.println(dis.readLong());

       ds.close();  

}

}

透过ByteArrayInputStream、ByteArrayOutputStream能够传递对象。

【示例5】Person类(客户端与劳务器端都急需存在Person类)

航天科工,class Person implements Serializable{

    int age;

    String name;

    public Person(int age, String name) {

       super();

       this.age = age;

       this.name = name;

    }

}

【示例6】客户端

public class Client {

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

       Person person = new Person(20,”aa”);

       ByteArrayOutputStream   bos = new   ByteArrayOutputStream();

       ObjectOutputStream   oos = new   ObjectOutputStream(bos);

       oos.writeObject(person);

       byte[] b = bos.toByteArray();

       //必须告诉数据包要发到哪儿去

       DatagramPacket dp = new DatagramPacket(b,b.length,new  
InetSocketAddress(“localhost”,8999));

       //作者自家占用七千端口向外面机器发数据包

       DatagramSocket ds = new DatagramSocket(9000);

       ds.send(dp);

       ds.close();

    }

}  

【示例柒】服务器端

public class Server {

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

       DatagramSocket ds = new DatagramSocket(8999);

       byte[] b = new byte[1024];

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

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

       ByteArrayInputStream   bis = new  
ByteArrayInputStream(dp.getData());

       ObjectInputStream   ois = new   ObjectInputStream(bis);

       Person   person = (Person) ois.readObject();

       System.out.println(person.name);

       ds.close();

    }

}


「全栈Java笔记」是1部能帮大家从零到百分之十长为全栈Java工程师体系笔记。小编江湖人队称
Mr.
G,10年Java研究开发经验,曾在神州数码、航天院某所研究开发宗旨从事软件设计及研究开发工作,从小白慢慢做到工程师、高级工程师、框架结构师。精通Java平台软件开发,精通JAVAEE,熟稔各类流行开发框架。

 笔记包蕴从浅入深的6大学一年级部分:

 A-Java入门阶段

 B-数据库从入门到精晓

 C-手刃移动前端和Web前端

 D-J2EE从理解到实战

 E-Java高级框架精解

 F-Linux和Hadoop 

发表评论

电子邮件地址不会被公开。 必填项已用*标注