一.概述:
计算机网络
●是指将地理位置不同的具有 独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
网络编程
●在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换
二.网络编程三要素:
IP地址
●要想让网络中的计算机能够 互相通信,必须为每台计算机指定一个标识号, 通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而P地址就是这个标识号。也就是设备的标识
端口
●网络的通信,本质上是两个应用程序的通信。每台计算机都有很多的应用程序,那么在网络通信时,如何区分这些应用程序呢?如果说IP地址可以唯一标识网络中的设备 ,那么端口号就可以唯一标识设备中的应用程序了。也就是应用程序的标识
协议
●通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统规定,通信双方必须同时遵守才能完成数据交换。常见的协议有UDP协议和TCP协议
一.IP地址
IP地址:是网络中设备的唯一标识。
1.ip地址的分类
2.IP常用命令:
ipconfig:查看本机IP地址
ping IP地址:检查网络是否连通
3.IP地址操作类-InetAddress
package 海绵hong; import java.net.InetAddress; public class InetAddressDemo01 { public static void main(String[] args) throws Exception { // 1.获取本机地址对象。 InetAddress ip1 = InetAddress.getLocalHost(); System.out.println(ip1.getHostName()); System.out.println(ip1.getHostAddress()); // 2.获取域名ip对象 InetAddress ip2 = InetAddress.getByName("www.baidu.com"); System.out.println(ip2.getHostName()); System.out.println(ip2.getHostAddress()); // 3.获取公网IP对象。 InetAddress ip3 = InetAddress.getByName("112.80.248.76"); System.out.println(ip3.getHostName()); System.out.println(ip3.getHostAddress()); // 4.判断是否能通: ping 5s之前测试是否可通 System.out.println(ip3.isReachable(5000)); } }
二.端口
端口:
三.协议
协议:
计算机网络中,连接和通信的规则被称为网络通信协议

1.UDP协议
1.1 UDP通信原理
2.2 UDP发送数据
package 网络编程; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; / 发送端 一发 一收 */ public class UDPfa { public static void main(String[] args) throws Exception { System.out.println("=====客户端启动======"); // 1、创建发送端对象:发送端自带默认的端口号(人) DatagramSocket socket = new DatagramSocket(6666); // 2、创建一个数据包对象封装数据 / public DatagramPacket(byte buf[], int length, InetAddress address, int port) 参数一:封装要发送的数据 参数二:发送数据的大小 参数三:服务端的主机IP地址 参数四:服务端的端口 */ byte[] buffer = "海绵hong,有一个好工作".getBytes(); DatagramPacket packet = new DatagramPacket( buffer, buffer.length, InetAddress.getLocalHost() , 8888); // 3、发送数据出去 socket.send(packet); socket.close(); } }
2.3UDP发送数据
package 网络编程; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; / 接收端 */ public class UDPjie { public static void main(String[] args) throws Exception { System.out.println("=====服务端启动======"); // 1、创建接收端对象:注册端口(人) DatagramSocket socket = new DatagramSocket(8888); // 2、创建一个数据包对象接收数据(韭菜盘子) byte[] buffer = new byte[1024 * 64]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); // 3、等待接收数据。 socket.receive(packet); // 4、取出数据即可 // 读取多少倒出多少 int len = packet.getLength(); String rs = new String(buffer,0, len); System.out.println("收到了:" + rs); // 获取发送端的ip和端口 String ip =packet.getSocketAddress().toString(); System.out.println("对方地址:" + ip); int port = packet.getPort(); System.out.println("对方端口:" + port); socket.close(); } }
2.TCP协议


2.1 TCP通信原理
2.2TCP发送数据:
import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.net.Socket; public class ClientDemo1 { public static void main(String[] args) { try { System.out.println("====客户端启动==="); // 1、创建Socket通信管道请求有服务端的连接 // public Socket(String host, int port) // 参数一:服务端的IP地址 // 参数二:服务端的端口 Socket socket = new Socket("127.0.0.1", 7777); // 2、从socket通信管道中得到一个字节输出流 负责发送数据 OutputStream os = socket.getOutputStream(); // 3、把低级的字节流包装成打印流 PrintStream ps = new PrintStream(os); // 4、发送消息 ps.println("我是TCP的客户端,我已经与你对接,并发出邀请:约吗?"); ps.flush(); // 关闭资源。 // socket.close(); } catch (Exception e) { e.printStackTrace(); } } }
2.3TCP接收数据
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo2 { public static void main(String[] args) { try { System.out.println("===服务端启动成功==="); // 1、注册端口 ServerSocket serverSocket = new ServerSocket(7777); // 2、必须调用accept方法:等待接收客户端的Socket连接请求,建立Socket通信管道 Socket socket = serverSocket.accept(); // 3、从socket通信管道中得到一个字节输入流 InputStream is = socket.getInputStream(); // 4、把字节输入流包装成缓冲字符输入流进行消息的接收 BufferedReader br = new BufferedReader(new InputStreamReader(is)); // 5、按照行读取消息 String msg; if ((msg = br.readLine()) != null){ System.out.println(socket.getRemoteSocketAddress() + "说了:: " + msg); } } catch (Exception e) { e.printStackTrace(); } } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232199.html原文链接:https://javaforall.net
