Java学习日记——网络编程

在网络通信协议下,不同计算机上运行的程序,进行的数据传输。

网络编程三要素:

IP:

IPv4:全称: Internet Protocol version 4,互联网通信协议第四版。采用32位地址长度,分成4组;平时表示是是点分十进制 4位都是0~255

IPv4的地址分类形式:公网地址(万维网使用)和私有地址(局域网使用)。

192.168.开头的就是私有址址,范围即为192.168.0.0--192.168.255.255,专门为组织机构内部使用,以此节省IP

特殊IP地址:127.0.0.1,也可以是localhost:是回送地址也称本地回环地址,也称本机IP,永远只会寻找当前所在本机。发送数据给自己的时候发送这个地址是不用经过路由器再找。

IPv6:采用128位地址长度,分成8组。冒分十六进制(0位压缩表示法:中间连续的0可以压缩了)

InetAddress:

表示ip的对象

子类Inet4Address对应ipv4

//获取对象
InetAddress address=InetAddress.getByName("地址192.168.1.100");

端口号:

协议:

UDP协议:

用户数据报协议(User Datagram Protocol)UDP是面向无连接通信协议。

速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据

面向无链接:发送数据的时候不会检查网络是否畅通,但是会快一点

TCP协议:

传输控制协议TCP(Transmission Control Protocol)TCP协议是面向连接的通信协议。

速度慢,没有大小限制,数据安全。

UDP通信程序:

发送数据:

创建发送端的DatagramSocket对象;数据打包(DatagramPacket);发送数据;释放资源

DatagramSocket ds=new DatagramSocket();//参数是绑定端口,用这个端口往外发送数据,
空参就是可用端口中随机一个
//打包数据
String name="";
byte[] bytes=name.getBytes();
InetAddress address=InetAddress.getByName("192.168.1.100");
int port=10086;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//port发送的端口  address发送地址
ds.sent(dp);
ds.close();

接受数据:

创建接收端的DatagramSocket对象;接收打包好的数据;解析数据包;释放资源

DatagramSocket ds=new DatagramSocket(10086);
//接收的时候一定要绑定端口,端口和发到的端口一样
byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//堵塞的,会等发送端发送数据再执行下面的
ds.receive(dp);
//解析数据包
byte[] data=dp.getDate();
dp.getLength();dp.getAddress();//获得地址
dp.getPort();//获得对方的端口
ds.close();

UDP的三种通信方式:

单播:一对一

组播:一对一组

组播地址:224.0.0.0~239.255.255.255

其中224.0.0.0~224.0.0.255为预留的组播地址

//发送
MulticastSocket ms=new MulticastSocket();
String name="";
byte[] bytes=name.getBytes();
InetAddress address=InetAddress.getByName("224.0.0.1");//此时地址应该是组播地址
int port=10086;
DatagramPacket dp=new DatagramPacket(bytes,bytes.length,address,port);
//port发送的端口  address发送地址
ms.sent(dp);
ms.close();

//接受
MulticastSocket ms=new MulticastSocket();
InetAddress address=InetAddress.getByName("224.0.0.1");
ms.joinGroup(address);//将当前本机加入到224.0.0.1这一组中
//需要多个就用多个接收端都来加入到这一组中
//接收的时候一定要绑定端口,端口和发到的端口一样
byte[] bytes=new byte[1024];
DatagramPacket dp=new DatagramPacket(bytes,bytes.length);
//堵塞的,会等发送端发送数据再执行下面的
ms.receive(dp);
//解析数据包
byte[] data=dp.getDate();
dp.getLength();dp.getAddress();//获得地址
dp.getPort();//获得对方的端口
ms.close();

广播:对局域网中所有电脑

广播地址:255.255.255.255

代码只要修改地址为广播地址就可以了

TCP通信程序:

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象通信之前要保证连接已经建立。通过Socket产生IO流来进行网络通信

//客户端发送数据 创建对象的时候链接不上会报错的
Socket socket=new Socket("127.0.0.1",10000);
OutputStream os=socket.getOutpuStream();
os.write();
os.close();socket.close();

//服务端 接受端
ServiceSocket ss=new ServiceSocket(10000);//端口要一致
//监听客户端的连接
Socket socket=ss.accept();
//从连接通道读取数据
InputStream is=socket.getInputStream();
//读中文要把is转换成字符流  
//InputStreamReader isr=new InputStreamReader(is);
int b;
while(b=is.read()!=-1){}
socket.close();
ss.close()

细节:要先运行服务端,要不然客户端找不到;服务端会停止在监听,直到客户端连接;

客户端底层会通过三次握手协议保证连接的建立

断开的时候会通过四次挥手协议保证通道内数据处理完才断开通道

三次握手:

四次挥手:

其他:

手动结束标记

socket.shutdownOutput();//在客户端中写完后服务端会结束读取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃芒果的蘑菇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值