java.net :为实现网络应用程序提供类。

InetAddress类

方法摘要

方法摘要
boolean equals(Object obj) : 将此对象与指定对象比较。
byte[] getAddress() :返回此 InetAddress 对象的原始 IP 地址。
static InetAddress[] getAllByName(String host) :在给定主机名的情况下,根据系统上配置的名称服务返回其 IP 地址所组成的数组。
static InetAddress getByAddress(byte[] addr) :在给定原始 IP 地址的情况下,返回 InetAddress 对象。
static InetAddress getByAddress(String host, byte[] addr) : 根据提供的主机名和 IP 地址创建 InetAddress。
static InetAddress getByName(String host) :在给定主机名的情况下确定主机的 IP 地址。
String getCanonicalHostName() :获取此 IP 地址的完全限定域名。
String getHostAddress() : 返回 IP 地址字符串(以文本表现形式)。
String getHostName() : 获取此 IP 地址的主机名。
static InetAddress getLocalHost() : 返回本地主机。
int hashCode() :返回此 IP 地址的哈希码。
String toString() : 将此 IP 地址转换为 String。
public class Inet_Address {
public static void main(String[] args) throws UnknownHostException {
InetAddress address1 = InetAddress.getByName("www.baidu.com");
System.out.println(address1.getAddress() + " " + address1.getHostName() + " " + address1.getHostAddress() + " " + address1.getCanonicalHostName());
System.out.println();
}
}

执行结果:

[B@1b6d3586 www.baidu.com 182.61.200.7 182.61.200.7

Socket

  • 两个Java应用程序可通过一个双向的网络的网络通信连接实现数据交换,双向链路的一端称为一个Socket。
  • Socket通常用来实现client-server连接。
  • java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的Client和Server端。
  • 建立连接时所需的寻址信息为远程计算机的IP地址和端口号。

ServerSocket

ServerSocket是阻塞式的,启动后就一直等待客户端连接。

TCP协议 server client示例

Server端

public class TCPServer {
public static void main(String[] args) throws Exception {
//通过6666端口监听客户端连接
ServerSocket ss = new ServerSocket(6666);
//ServerSocket是阻塞式的,启动后就一直等待客户端连接。
while (true) {
//accept()允许(等待)一个客户端连接
Socket sClient = ss.accept();
System.out.println("client connect success!");
//数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
DataInputStream dis = new DataInputStream(sClient.getInputStream());
//readUTF 阻塞式
System.out.println(dis.readUTF());
//给客户端发信息
OutputStream os = sClient.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("客户端IP地址:"+sClient.getInetAddress()+"端口:"+sClient.getPort());
dos.flush();
Thread.sleep(3000);
dis.close();
dos.close();
sClient.close();
}
}
}

Client 端

public class TCPClient {
public static void main(String[] args) throws Exception {
Socket s = new Socket("127.0.0.1", 6666);
OutputStream os = s.getOutputStream();
//数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。
DataOutputStream out = new DataOutputStream(os);
Thread.sleep(3000);
out.writeUTF("hello server!");
//调用flush()方法只是将数据写入操作系统缓存中,并不保证数据会立即发送
out.flush();
//接收客户端地址
InputStream is = s.getInputStream();
DataInputStream dis = new DataInputStream(is);
System.out.println(dis.readUTF());
out.close();
dis.close();
s.close();
}
}

执行结果

先启动服务端,在启动客户端

UDP协议 server client示例

UDP协议 严格意义上UDP不存在Server和Client

server端

public class UDPServer {
public static void main(String[] args) throws Exception{
byte buf[] = new byte[1024];
//接受一个数据包存入Buf[]中
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//构造数据报套接字 绑定端口 准备接受数据报
DatagramSocket ds = new DatagramSocket(5555);
while(true)
{
//从此套接字接收数据报包
ds.receive(dp);
ByteArrayInputStream ByteArrayInputStream = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(ByteArrayInputStream);
System.out.println(dis.readLong());
System.out.println(dp.getAddress()+"..."+dp.getPort()); } }
}

client端

public class UDPClient {
public static void main(String[] args) throws Exception{
long n = 10000L;
ByteArrayOutputStream bas = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bas);
dos.writeLong(n); byte[] buf = bas.toByteArray();
System.out.println(buf.length); DatagramPacket dp = new DatagramPacket(buf, buf.length,
new InetSocketAddress("127.0.0.1", 5555)
);
//Client 使用UDP的6666端口向服务端发数据 如果不指定端口,客户端将随机占用一个端口号
DatagramSocket ds = new DatagramSocket(6666);
ds.send(dp);
ds.close(); }
}

执行结果


http://www.dtmao.cc/news_show_656725.shtml

Java Socket InetAddress类 Socket DatagramPacket TCP、UDP示例的更多相关文章

  1. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  2. Socket(套接字) IP TCP UDP HTTP

    Socket(套接字) 阮老师的微博 (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进 ...

  3. java中Inetaddress类

    InetAddress类 InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名. 你通过一个IP主机名与这个类发生作用,IP主机名比它的IP地址用起来更简便更容易理解. Ine ...

  4. IP和java.net.InetAddress类的使用

    一.IP 1.地址格式 互联网上每一台计算机都有一个唯一标示自己的标记,这个标记就是IP地址.IP 地址使用32 位长度二进制数据标示,一般在实际中看到的大部分IP地址都是以十进制的数据形式标示的,如 ...

  5. Java 网络编程(二) 两类传输协议:TCP UDP

    链接地址:http://www.cnblogs.com/mengdd/archive/2013/03/09/2951841.html 两类传输协议:TCP,UDP TCP TCP是Transfer C ...

  6. Java学习---InetAddress类的学习

    基础知识 1.InetAddress类 在网络API套接字,InetAddress类和它的子类型对象使用域名DNS系统,处理主机名到主机IPv4或IPv6地址的转换.如图1-1所示. 由于InetAd ...

  7. Android(java)学习笔记79:java中InetAddress类概述和使用

    要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和操作I ...

  8. Android(java)学习笔记19:Java中InetAddress类概述和使用

    1. 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接受数据的计算机和识别发送的计算机. 在TCP/IP协议中,这个标识号就是IP地址. 那么,我们如果获取和 ...

  9. [java语言]——InetAddress类的getByName()方法

    InetAddress---表示互联网协议(IP)地址 ---InetAddress.getByName("www.163.com")----在给定主机名的情况下确定主机的IP地址 ...

随机推荐

  1. Qt学习笔记-Qt-4.8.6+phonon+mplayer

    首先,用phonon播放音乐时,可以使用mplayer.首先,你的设备上需要安装一个mplayer并测试能用. 然后安装后端播放插件. 我用的是网上找的phonon-mplayer. 按照网上的方法, ...

  2. 多线程并行_countDown

    /** * 首次启动加载数据至缓存 */ public class ApplicationStartTask { private static Logger logger = LoggerFactor ...

  3. Eclipse导入外部jar包的步骤

    (1)首先在项目的跟目录下先建一个名字为lib的文件夹,通常外部导入的jar包都放在这个文件夹下面. (2)将需要用到的jar包复制到lib文件夹下面. (3)在项目中导入jar包 右键项目,选择Bu ...

  4. sql文件转换为excel文件

    最近经常需要把sql整理成excel,本人比较懒,所以写一个小工具,用到了jxl包.以前没有接触过,正好了解一下. 一.基础知识       jxl操作excel包括对象 Workbook,Sheet ...

  5. MP(MyBatis-Plus)实现乐观锁更新功能

    实现步骤 step1:添加乐观锁拦截器 MP的其他拦截器功能可以参考官网 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { ...

  6. Head First 设计模式 —— 07. 适配器模式

    思考题 你能想到真实世界中,还有哪些适配器的例子? P236 HDMI 转 VGA 转换器 Type-C 转 3.5mm 线 适配器模式解析 客户使用适配器的过程: P241 客户通过目标接口调用适配 ...

  7. 吃透论文——推荐算法不可不看的DeepFM模型

    大家好,我们今天继续来剖析一些推荐广告领域的论文. 今天选择的这篇叫做DeepFM: A Factorization-Machine based Neural Network for CTR Pred ...

  8. OpenTelemetry - 云原生下可观测性的新标准

    CNCF 简介 CNCF(Cloud Native Computing Foundation),中文为"云原生计算基金会",CNCF是Linux基金会旗下的基金会,可以理解为一个非 ...

  9. 关于.NET中的控制反转(三)- 依赖注入之 Autofac

    一.Autofac简介 Autofac和其他容器的不同之处是它和C#语言的结合非常紧密,在使用过程中对你的应用的侵入性几乎为零,更容易与第三方的组件集成.Autofac的主要特性如下: 组件侵入性为零 ...

  10. yolov5实战之皮卡丘检测

    前言 从接触深度学习开始一直都做的是人脸识别,基本上也一直都在用mxnet. 记得之前在刚接触的时候看到博客中写到,深度学习分三个层次,第一个层次是分类,第二个层次是检测,第三个层次是分割.人脸识别算 ...