大数据 -- java基础16 网络编程 TCP UDP
1、网络编程的三要素:(1)IP地址(2)端口号(3)协议
2、IP地址 : 网络中计算机唯一标识。 (1)IP地址在计算机中存储的时候是由二进制的形式进行存储的:IP:192.168.7.42 十进制换算成二进制: 11000000.10101000.00000111.00101010实际上存储的是: 11000000101010000000011100101010为了方便IP地址的标识,就把IP地址上的每一个字节上的数据转换成10进制,然后字节与字节之间用 . 分割标识。这样的表示法叫做 : 点分十进制表示法(2)IP地址的组成: 网络号段 + 主机号段(3)IP地址的分类:A:第一个号段定义为网络号段 + 后面三个号段都是为主机号段 (主机号段:将来可以连接多少台电脑)可以有多少台主机相连: (3个号段): 256*256*255 11111111*11111111*11111110 = 256*256*255B:前两个号段为网络号段 + 后两个号段为主机号段 256*255C:前三个号段都为网路号段 + 最后一个号段为主机号段 255 局域网D:224.0.0.1---239.255.255.254E:240.0.0.1---247.255.255.254(4)特殊的IP地址:1、loaclhost = 本机 = 127.0.0.1127.0.0.1 : 回环地址,可以用于测试本机的网络是否有问题, 检测方法: ping 127.0.0.12、广播地址:x.x.x.2553、网络地址:x.x.x.0
3、为了方便我们对IP地址的获取和操作,java提供了一个类InetAddress 供我们使用:
InetAddress的方法:
(1)public static InetAddress getByName(String host) 确定主机名称的IP地址。(2)public String getHostName() 获取此IP地址的主机名。(3)public String getHostAddress() 返回文本显示中的IP地址字符串。(4)getAddress() 返回此InetAddress对象的原始IP地址。
public class InetAddressDemo {public static void main(String[] args) {//public static InetAddress getByName(String host) 确定主机名称的IP地址。InetAddress name = null;try {name = InetAddress.getByName("192.168.7.18");} catch (UnknownHostException e) {e.printStackTrace();}System.out.println(name); // /192.168.7.18//public String getHostName() 获取此IP地址的主机名。String hostName = name.getHostName();System.out.println(hostName); // XiaoWang//public String getHostAddress() 返回文本显示中的IP地址字符串。String hostAddress = name.getHostAddress();System.out.println(hostAddress); // 192.168.7.18 (这是一个字符串)}
}
4、TCP
建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是可靠协议;必须建立连接,效率会稍低
/*** -----------TCP客户端----------------** TCP协议客户端代码实现:* 1、创建客户端的Socket对象 -- 这一步如果成功创建对象,就说明连接已经建立成功* 构造方法: (1)Socket(InetAddress address, int port) 创建流套接字并将其连接到指定IP地址的指定端口号。* (2)Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号。** 2、获取输出流对象,向服务器写数据* OutputStream getOutputStream() 返回此套接字的输出流。** 3、释放资源,关闭Socket服务*** 注意事项:* 要先启动服务器端,再启动客户端,否则会报连接被拒绝异常*/public class ClientDemo {public static void main(String[] args) {//1、创建发送端的Socket对象//(1)Socket(InetAddress address, int port) 创建流套接字并将其连接到指定IP地址的指定端口号。
// Socket s = new Socket(InetAddress.getByName("192.168.7.42"), 12345);//(2)Socket(String host, int port) 创建流套接字并将其连接到指定主机上的指定端口号。Socket s = null;try {s = new Socket("192.168.7.18", 12345);//2、获取输出流对象,向服务器写数据//OutputStream getOutputStream() 返回此套接字的输出流。OutputStream os = s.getOutputStream();os.write("你好,新世界".getBytes());} catch (IOException e) {e.printStackTrace();}//3、释放资源,关闭Socket服务if(s != null) {try {s.close();} catch (IOException e) {e.printStackTrace();}}}
}/*** -----------TCP服务器端----------------** TCP协议编写服务器端代码:* 1、创建服务器端Socket对象(ServerSocket)* 构造方法: ServerSocket(int port) 创建绑定到指定端口的服务器套接字。** 2、服务器端没有直接对流的操作,所以调用accept()方法,监听客户端的连接,返回一个对应客户端连接的Socket对象* Socket accept() 侦听要连接到此套接字并接受它。** 3、获取通道中的输入流对象,读取客户端发送的数据* InputStream getInputStream() 返回此套接字的输入流。* InetAddress getInetAddress() 返回套接字所连接的地址(客户端地址)。** 4、释放资源,关闭Socket服务**/public class ServerDemo {public static void main(String[] args) {//1、创建服务器端Socket对象(ServerSocket)//ServerSocket(int port) 创建绑定到指定端口的服务器套接字。ServerSocket ss = null;try {ss = new ServerSocket(12345);//2、调用accept()方法,监听客户端的连接,返回一个对应客户端连接的Socket对象//Socket accept() 侦听要连接到此套接字并接受它。Socket s = ss.accept();//3、获取通道中的输入流对象,读取客户端发送的数据,并显示在控制台上//InputStream getInputStream() 返回此套接字的输入流。InputStream is = s.getInputStream();//获取客户端的ip//getInetAddress() 返回套接字所连接的地址(客户端地址)。String ip = s.getInetAddress().getHostAddress();String hostName = s.getInetAddress().getHostName();byte[] bytes = new byte[1024];int length = is.read(bytes);String s1 = new String(bytes, 0, length);System.out.println(ip + "名为: " + hostName + "发送的数据为: " + s1);} catch (IOException e) {e.printStackTrace();}}
}
5、UDP
将数据源和目的封装成数据包中,不需要建立连接;每个数据报包的大小在限制在64k;因无连接,是不可靠协议;不需要建立连接,速度快
/*** -----------UDP发送端----------------** UDP协议发送数据 :* 1、创建发送端的Socket对象** DatagramSocket类构造方法1:* DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口。** 2、创建数据,并把数据打包** DatagramPacket类构造方法1:* DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造用于发送指定长度的数据包到指定主机上指定的端口号。** 3、调用Socket对象的发送方法将数据发送出去* 发送方法 : void send(DatagramPacket p) 从此套接字发送数据报包。** 4、释放资源,关闭Socket**/public class SendDemo {public static void main(String[] args) throws Exception{//1、创建发送端的Socket对象//DatagramSocket() 构造数据报套接字并将其绑定到本地主机上的任何可用端口。DatagramSocket ds = new DatagramSocket();//2、创建数据,并把数据打包//(1)定义一个字节数组byte[] bytes = "你好,大数据".getBytes();//(2)获取数组的长度int length = bytes.length;//(3)要发送的IP地址InetAddress address = InetAddress.getByName("192.168.7.18");//(4)自定义设置端口号 有效端口:0~65535,其中0~1024系统使用或保留端口int port = 10086;//DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造用于发送指定长度的数据包到指定主机上指定的端口号。DatagramPacket dp = new DatagramPacket(bytes, length, address, port);//3、调用Socket对象的发送方法将数据发送出去//void send(DatagramPacket p) 从此套接字发送数据报包。ds.send(dp);//4、释放资源,关闭Socketds.close();}
}/*** -----------UDP接收端----------------** UDP协议接收数据:* 1、创建接收端的Socket对象** DatagramSocket类构造方法2:* DatagramSocket(int port) 构造数据报套接字并将其绑定到本地主机上的指定端口。** 2、创建一个数据包(接收容器)** DatagramPacket类构造方法2:* DatagramPacket(byte[] buf, int length) 构造一个DatagramPacket用于接收指定长度的数据包。** 3、调用Socket对象的接收方法接收数据* 接收方法 : void receive(DatagramPacket p) 从此套接字接收数据报包。** 4、解析数据包,得到数据并显示在控制台上* public byte[] getData() 获取到数据包里的数据。* public int getLength() 返回要发送的数据的长度或接收到的数据的长度。** 5、释放资源,关闭Socket*** 注意事项:* 接收端程序在绑定同一个端口的时候不能同时运行多个,即不能同时启动多个接收端。*/public class ReceiveDemo {public static void main(String[] args) throws Exception {//1、创建发送端的Socket对象//DatagramSocket(int port) 构造数据报套接字并将其绑定到本地主机上的指定端口。DatagramSocket ds = new DatagramSocket(10086); // 因为发送端定义了端口号10086//2、创建一个数据包(接收容器)//(1)定义一个字节数组byte[] bytes = new byte[1024];//(2)获取数组的长度int length = bytes.length;//DatagramPacket(byte[] buf, int length) 构造一个DatagramPacket用于接收指定长度的数据包。DatagramPacket dp = new DatagramPacket(bytes, length);//3、调用Socket对象的接收方法接收数据//void receive(DatagramPacket p) 从此套接字接收数据报包。ds.receive(dp); //调用receive程序阻塞,直到接收到发送端发送的数据InetAddress address = dp.getAddress(); // 获取InetAddress对象String ip = address.getHostAddress(); // 通过InetAddress对象获取ip地址字符串//4、解析数据包,得到数据并显示在控制台上//public byte[] getData() 获取到数据包里的数据。byte[] data = dp.getData();//public int getLength() 返回要发送的数据的长度或接收到的数据的长度。int length1 = dp.getLength();String s = new String(data, 0, length1);System.out.println(ip + "发送的数据为: " + s);//5、释放资源,关闭Socketds.close();}
}
大数据 -- java基础16 网络编程 TCP UDP相关推荐
- 黑马程序员 java基础之网络编程TCP
TCP网络传输. 客户端和服务端 分别对应着两个对象. Scoket(客户端)和ServerSocket(服务端). Socket(String address, int port) 创建一个流套接 ...
- 【全集】大数据Java基础
课程介绍 本课程是由猎豹移动大数据架构师,根据Java在公司大数据开发中的实际应用,精心设计和打磨的大数据必备Java课程.通过本课程的学习大数据新手能够少走弯路,以较短的时间系统掌握大数据开发必备语 ...
- JAVA基础11 网络编程
JAVA基础 11.网络编程 1.什么是网络?网络模型?网络四要素? 1.网络 在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享. 资源的 ...
- java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计
[JAVA 网络编程 TCP/IP.Socket 和协议设计] TCP/IP 协议简介 IP 首先我们看 IP(Internet Protocol)协议.IP 协议提供了主机和主机间的通信. 为了完成 ...
- java全双工_java网络编程TCP聊天全双工
我正在实现服务器和客户端之间的简单TCP聊天.我使用多线程,因此服务器和客户端可以同时发送和接收数据(全双工).该程序可以工作,但如果服务器有一个控制台既可以输入发送消息,也可以显示接收消息(对于客户 ...
- 网络编程(Tcp/Udp实现聊天、文件上传)
网络编程 1.1 概述 计算机网络是指将位置不同的多台[计算机 通过通信线路连接起来,实现资源共享和信息传递的计算机系统 1.2 网络通信的要素 ip和端口 网络通信协议(tcp/udp) 1.3 I ...
- Java基础23 网络编程 socket套接字流 TCP传输总结
一.网络编程的概念 1.计算机网络:将不同地区的计算机,使用网络来进行连接 实现不同地区的数据的交互与共享(互联时代) 2. 网络编程的三要素:IP地址 端口号 协议 3. ip地址:是在网络连接中 ...
- Java基础:网络编程
1. 网络编程概述 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两台计 ...
- 【Java】网络编程——TCP/UDP网络对讲机
目录 前言 OSI概述 传输层 端口 Socket InetAddress类 UDP协议间的通信 UDP协议相关类 UDP 发送端 UDP 接收端 + 发送端 UDP 聊天 + 全局广播 UDP发送大 ...
最新文章
- scala中类的继承关系
- apatedns unhandled exception
- android内部通信handler
- 什么是计算机的网络体系结构,什么是网络体系结构 网络体系结构介绍【详解】...
- windows消息机制深入详解-1
- python 动态规划_DP动态规划(Python实现)
- go read text file into string array
- cad通过钢筋大样生成钢筋明细表插件_各位做室内外设计的朋友,告别CAD单线画图,用天正建筑更方便...
- linux 标准vruntime,linux – CFS中vruntime的概念是什么
- 公交查询www.chajt.com
- 分布式存储系统设计的关键问题
- Ubuntu16.04 安装显卡驱动 cuda,cudnn
- 计算机学术论文shortessay,期末论文essay
- ppt讲解中的过渡_PPT「过渡页」怎么设计才好看?
- java double精度丢失 0.1+0.2不等于0.3
- 微信跳转到关注公众号万能链接
- python画柱形图显示数值_python画柱状图--不同颜色并显示数值的方法
- 计算机是xp系统吗,任何电脑都能装XP系统吗?
- 平衡二叉树的左旋右旋详解 看不懂你打我
- 2023年科普新书大盘点:重磅新书,值得期待!