网络编程

it2025-03-05  31

网络编程

什么是计算机网络?

网络即将不同区域的电脑连接到一起, 组成局域网、城 域网或广域网。把分布在不同地理区域的计算机与专门 的外部设备用通信线路互连成一个规模大、功能强的网 络系统,从而使众多的计算机可以方便地互相传递信 息,共享硬件、软件、数据信息等资源。

计算机网络的作用?

资源共享信息传输与集中处理均衡负荷与分布处理

IP地址

​ 定义网络上的节点的一串字符,节点比如手机、电脑、ipad、服务器、交换机、路由器等。

​ IP地址目前有两类:ipv4(大量使用)和ipv6

​ 本机ip:127.0.0.1

​ 本机域名:localhost ,通过DNS转换出来的

​ 非注册ip:192.168.0.0~192.168.255.255 (供组织内部使用的私有ip)。

端口(Port)

​ 虚拟概念,每台计算机上都有多个端口,每个端口对应一个软件,因此,端口多用于区分不同的软件。

​ 端口0~65535 (2字节)

注意:同一协议下端口号不能冲突

​ 建议使用8000以上的端口号,8000以内的为预留端口号

常见端口号:

80 http8080 tomcat3306 mysql1521 oracle

URL(统一资源定位符)

跟据IP+端口+文件路径来找到对应的文件资源。

示例:https://www.baidu.com:80/index.html?nn=123#a

网络编程

使用到的类:

java.net.InetAddress 查看IP地址及有关信息java.net.URL 代表统一资源定位符java.net.InetSocketAddress IP套接字地址(IP地址+端口号)java.net.DatagramSocket 建立连接用的java.net.DatagramPacket 用于发送和接收数据的Java.net.Socket Tcp中建立客户端的java.nett.ServerSocket Tcp中建立服务端的

网络爬虫

基本原理

步骤a:构建 URL url = new URL(地址);

步骤b: 使用openStream() 打开流

BufferedReader rd = new BufferedReader(new InputStreamReader(url.openStream()))

步骤c: 读取流中的数据

String msg =null;

while((msg=rd.readLine())!=null){

​ System.out.println(msg);

}

步骤d: 关闭流

rd.close();

代码实现示例

//创建URL URL url = new URL("网址"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));//创建读入数据处理流 BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File("src\\com\\shsxt\\course\\java\\day11\\test1.txt"))));//创建写出数据处理流 String str = ""; while((str = bufferedReader.readLine())!=null){ bufferedWriter.write(str);//将爬取到的数据写出到文件 bufferedWriter.newLine();//换行 } bufferedWriter.close(); bufferedReader.close();

socket编程

网络编程的另一个名称,面向socket编程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZetzVkzT-1603282472413)(C:\Users\longquan\AppData\Local\Temp\1603280550159.png)]

socket就像一个口子,让传输层和应用层可以进行信息交流的口子

UDP

​ DatagramSocket: 定义发送端

​ DatagramPacket: 打包

发送端步骤:

定义发送端

​ DatagramSocket datags = new DatagramSocket(参数);

准备数据

打包

​ DatagramPacket packet = new DatagramPacket(参数);

发送

​ datdgs.send(packet);

关闭

​ datdgs.close();

代码示例

//发送端 DatagramSocket datags = new DatagramSocket(9091); //准备数据 File file = new File("src\\com\\shsxt\\course\\java\\day11\\test2.txt"); InputStream inputStream = new FileInputStream(file); byte[] bytes = new byte[1]; int len; String string =""; while((len=inputStream.read(bytes))!=-1){ string += (char)bytes[0]; } byte[] bytes1 = string.getBytes(); int l = bytes1.length; DatagramPacket packet = new DatagramPacket(bytes1,l, InetAddress.getLocalHost(),9090); datags.send(packet); datags.close();

接收端步骤:

定义接收端

​ DatagramSocket datags = new DatagramSocket(9090);//接收端

准备包裹接收数据

​ byte[] b = new byte[1024]; DatagramPacket dp = new DatagramPacket(b,b.length);

接收

​ datags.receive(dp);

处理数据

关闭

​ datags.close();

注意:先运行接收端后发送端

代码示例

DatagramSocket datags = new DatagramSocket(9090);//接收端 byte[] b = new byte[1024]; DatagramPacket dp = new DatagramPacket(b,b.length); datags.receive(dp); String string = new String(dp.getData(),0,dp.getLength()); OutputStream outputStream = new FileOutputStream(new File("src\\com\\shsxt\\course\\java\\day11\\test333.txt")); byte[] bytes = string.getBytes(); outputStream.write(bytes); outputStream.flush(); outputStream.close(); datags.close();

TCP

基于IO

客户端步骤

定义我是客户端

​ Socket client = new Socket(“localhost”,9999);

获取输出流 client.getOutputStream()

​ DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream()));

写出字符串

​ os.writeUTF(“字符串”);

刷出

​ os.flush( ) ;

关闭

​ os.close( );

​ client.close();

代码示例

Socket client = new Socket("localhost",9999); DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream())); os.writeUTF(“字符串”); os.flush() ; os.close(); client.close();

服务端步骤

定义我是服务端

​ ServerSocket server = new ServerSocket(9999);

阻塞式监听

​ Socket client = server.accept();

获取输入流

​ DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream()));

读入数据

​ is.readUTF( );

关闭

​ server.close();//服务器端一般不会轻易关闭

server = new ServerSocket(9999);

阻塞式监听

​ Socket client = server.accept();

获取输入流

​ DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream()));

读入数据

​ is.readUTF( );

关闭

​ server.close();//服务器端一般不会轻易关闭

这里代码比较简单就不进行展示了,可以根据每一步中的提示自行编写就能写出来。

最新回复(0)