12.7-全栈Java笔记:Java网络编程(五)

UDP通讯的实现

1.DatagramSocket:用于发送或接收数据包

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

DatagramSocket有两种构造函数。一种是无需任何参数的,常用于客户端。另一种需要指定端口,常用于服务器。

常用方法:send、receive、 close

 

2.DatagramPacket:数据容器(封包)的作用

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

3.UDP通信编程基本步骤:

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

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

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

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

e)客户端接收数据包

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


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));

//我本身占用9000端口向外面机器发数据包

DatagramSocket ds = new DatagramSocket(9000);

ds.send(dp);

ds.close();

}

}

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


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));

//我本身占用9000端口向外面机器发数据包

DatagramSocket ds = new DatagramSocket(9000);

ds.send(dp);

ds.close();

}

}

【示例4】服务器端


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可以传递对象。

【示例5Person(客户端与服务器端都需要存在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));

//我本身占用9000端口向外面机器发数据包

DatagramSocket ds = new DatagramSocket(9000);

ds.send(dp);

ds.close();

}

}

【示例7】服务器端


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笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。

 笔记包含从浅入深的六大部分:

A-Java入门阶段

B-数据库从入门到精通

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

D-J2EE从了解到实战

E-Java高级框架精解

F-Linux和Hadoop

时间: 2025-01-07 17:08:59

12.7-全栈Java笔记:Java网络编程(五)的相关文章

Java笔记(9)-网络编程

不必说碧绿的菜畦,光滑的石井栏,高大的皂荚树,紫红的桑葚:也不必说鸣蝉在树叶里长吟,肥胖的黄蜂伏在菜花上,轻捷的叫天子(云雀)忽然从草间直窜向云霄里去了. 鲁迅 -–<从百草味到三味书屋> ---- [TOC] Java网络编程 URL 类 URL统一资源定位符 一个URL对象通常包含最基本的3部分信息:协议,地址,资源. 示例 用字节流读取流输入流中的数据时,由于汉字是两个字节,如果读取的长度不合适,就会有乱码,可以指定编码格式解决,增加一次读取的数据也可以解决, 用字符流也可以 中文乱码问

Java高并发网络编程(五)Netty应用

推送系统 一.系统设计 二.拆包和粘包 粘包.拆包表现形式 现在假设客户端向服务端连续发送了两个数据包,用packet1和packet2来表示,那么服务端收到的数据可以分为三种,现列举如下: 第一种情况,接收端正常收到两个数据包,即没有发生拆包和粘包的现象,此种情况不在本文的讨论范围内. 第二种情况,接收端只收到一个数据包,由于TCP是不会出现丢包的,所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包.这种情况由于接收端不知道这两个数据包的界限,所以对于接收端来说很难处理.

39.Python全栈之路:网络编程

socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求.      

我的全栈之路-Java架构师技术栈

我的全栈之路-Java架构师技术栈 我的全栈之路 JavaSE篇 Java概述与开发环境搭建 Java数据存储 Java数据计算 Java程序流程控制 Java数组 Java面向对象程序设计(上) Java面向对象程序设计(中) Java面向对象程序设计(下) Java常用API 集合 泛型 异常处理 注解 IO/BIO/NIO AIO网络框架tio设计与实现 多线程 网络编程 反射和动态代理 日志 XML 正则表达式 Java语言新特性实践 数据库编程(JDBC+MySQL) 数据结构 算法

我的全栈之路-Java基础之数据存储

我的全栈之路-Java基础之数据存储 我的全栈之路 2.1 标识符 标识符是在程序开发时给包,类.接口.注解,变量,方法命名的字符序列. 标识符在命名时需要遵守相关的规则和规范: 标识符的命名规则: 标识符不能是Java的关键字和保留字,关键字是Java中被赋予赋予特殊含义的单词,例如public static void等等.保留字是现有Java版本尚未使用,但是未来的Java版本可能会做关键字使用的单词,例如goto,const.但是可以包含关键字,保留字. 标识符可以由字母.数字.下划线组成

我的全栈之路-Java基础之macOS+Visual Studio Code开发Java程序

我的全栈之路-Java基础之macOS+Visual Studio Code开发Java程序 我的全栈之路 3.1 开发环境说明 首先说明下使用软件的版本,操作系统是基于macOS10.14.5,然后在macOS上安装了JDK11.03,如果想要了解macOS下JDK的安装,可以参考我的全栈之路-Java基础之macOS安装JDK,编辑器选用了微软公司开源的Visual Studio Code. 软件名称 软件版本 操作系统 macOS10.14.5 JDK JDK11.0.3 编辑器 Visu

Java学习之网络编程实例

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

JAVA笔记26-网络编程(不等于网站编程)

一.网络基础(TCP/IP详解) 1.IP协议(Internet Protocol):网络层,支持网间数据报通信.无连接数据报传送,数据报路由选择和差错控制. IPv4 32位(4字节),IPv6 128位(16字节).P ping ICMP协议 2.TCP协议.UDP协议 (1)TCP(transmission control protocol 打电话):专门设计用于在不可靠的因特网上提供可靠的.端到端的字节流通信的协议.它是一种面向连接的协议.有三次握手.慢 (2)UDP(user data

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

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

第62节:探索Java中的网络编程技术

前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层->第二层数据链路层->第三层网络层->第四层传输层->第五层会话层->第六层表示层->第七层应用层. 物理层是主要定义物理设备标准,数据链路层是主要讲从物理层接收的数据进行MAC地址(网卡的地址)的封装与解封装.这层的数据较帧. 网络层是将从下层接收到的数据进行IP地址的