网络编程

Posted on 2023-06-16 19:59  liuxin6de1b  阅读(232)  评论(0编辑  收藏  举报

网络概述:

  1. 多台相互连接的计算机
  2. 资源共享

        3.交换数据

网络的类型分类

按拓扑分类:星型结构 树型结构 总线型线程 环形结构 网状架构

按范围分类:局域网LAN 城域网MAN 广域网WAN 补充:个人局域网PAN 互联网Internet

按传输方式分类 :有线网络 无线网络 

网络体系结构:

OSI参考模型:物理层  数据链路层 网络层 传输层 会话层 表示层 引用层

TCP/IP参考模型: 网络接口层 网际层 传输层 引用层

网络通信协议概述:

在网络中,多台计算机如果希望进行通信/数据传递 必须遵循某种规约,如果不遵循,则无法进行资源共享或是数据的传递。

网络通信协议种类:

TCP协议(Transmission Control Protocol 传输控制协议)特点:面向连接,数据稳定/安全

UDP协议(User Datagram Protocol 用户数据报协议)特点:无连接,数据不可靠/不安全

Socket简介:

Socket:套接字(通信链路的节点/端点)

Socket:提供给应用程序的接口

Socket的路径:java . net包路径          

java网络编程的三要素

Ip地址:设备在网络中的唯一标识

端口号:应用程序在设备中的唯一标识

协议:信息在网络传递的过程中必须遵守的规约,例如UDP,TCP协议

基于UDP协议的Socket编程-发送数据

public class Demo {
public static void main(String[] args) throws IOException {
//实例化DaragramSocket对象
DatagramSocket datagramSocket = new DatagramSocket();
//封装需要传递的数据(以字节数组的形式传递)
String str="my lover";
//将字符串转换为字节数组;
byte[]bytes=str.getBytes();
//127.0.0.1代表发送到的目标地址{本机地址}
InetAddress byName = InetAddress.getByName("127.0.0.1");
//10086为端口号
int port=10086;
//将数组中所有要传递的数据bytes数组,以及ip地址address,端口号port打包封装到DatagramPacket构造器中
DatagramPacket datagramPacket= new DatagramPacket(bytes, bytes.length, byName, 10086);
//发送这个打包的数据
datagramSocket.send(datagramPacket);//(send发送包)
//释放资源
datagramSocket.close();
}

}

基于UDP协议的Socket编程-接受数据

public class Test1 {
public static void main(String[] args) throws IOException {
//实例化 DatagramSocket对象,指定端口号10086
DatagramSocket datagramSocket = new DatagramSocket(10086);
//封装数据
byte[]bytes=new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);
datagramSocket.receive(datagramPacket);//( datagramSocket发送,receive接收包datagramPacket打包)
byte[]data=datagramPacket.getData();//(解包)
int length=datagramPacket.getLength();//(解包)
//输出获取的数据
System.out.println("接收到数据"+new String(data,0,length));
//释放资源
datagramSocket.close();
}
}

基于TCP协议的Socket编程-发送数据

 

public class Tcpfa {
public static void main(String[] args) throws IOException {
//实例化Socket对象
Socket socket = new Socket("127.0.0.1",10001);
//以流的形式写出
OutputStream outputStream = socket.getOutputStream();
outputStream.write("我".getBytes());
//释放资源
outputStream.close();
socket.close();

 

}
}

 

基于TCP协议的Socket编程接收数据

 

public class Tcp {
public static void main(String[] args) throws IOException {
//实例化 ServerSocket对象
ServerSocket serverSocket = new ServerSocket(10001);
//获取服务器的链接
Socket socket = serverSocket.accept();
//以流的形式读取数据
InputStream is=socket.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(is);
int b=0;
while((b=inputStreamReader.read())!=-1){
System.out.println((char)b);
}
//释放资源
is.close();
serverSocket.close();
}

 

}

 

Copyright © 2024 liuxin6de1b
Powered by .NET 9.0 on Kubernetes