网络编程
- 网络编程是指在计算机网络环境中开发和实现应用程序的过程。它涉及到使用网络协议和技术来实现不同计算机之间的通信和数据交换。
- 在网络编程中,开发人员使用网络编程库、网络协议和相关的API来实现不同层次的网络通信。常用的网络编程技术包括套接字编程(Socket Programming)和HTTP协议。
IP
- IP是Internet Protocol(互联网协议)的缩写,它是一种网络协议,用于在互联网上进行数据通信。IP定义了互联网上的设备如何寻址和路由数据包,以确保数据能够正确地从源设备发送到目标设备。
- IP地址是在互联网上唯一标识设备的一组数字。它由32位(IPv4)或128位(IPv6)的二进制数字组成,通常以点分十进制(IPv4)或冒号分隔的十六进制(IPv6)表示。
端口
端口表示计算机上的一个进程
- 不同的进程有不同的端口号,用软件来区分
- 范围0~65535
- 端口号不能冲突
- 分类
- 公有端口0~1023
- 程序注册端口1024~49151
- 动态、私有端口49152~65535
查看进程端口号命令
netstat -ano #查看所有端口
netstat -ano | findstr "8080" #查看8080端口进程
通信协议
- 通信协议是计算机网络中用于规定数据传输和通信过程中的规则和约定的一种规范。它定义了数据的格式、传输方式、错误检测和纠正机制、数据压缩和加密方法等,以确保不同设备之间能够正确地交换和解释数据。通信协议还规定了通信的起始和结束方式、数据传输的顺序和流量控制等内容。
- 通信协议可以分为不同层次,每个层次负责不同的功能。常见的网络协议体系结构是TCP/IP协议栈,它包括物理层、数据链路层、网络层、传输层和应用层等多个层次。每个层次都有自己的协议,通过协议栈的层层封装和解封装,实现了数据的可靠传输和网络功能的实现。
- 参考分层模型
Java 模拟
server
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TestTcpServer {
public static void main(String[] args) {
ByteArrayOutputStream baos = null;
InputStream is = null;
Socket socket = null;
ServerSocket serverSocket = null;
try {
//服务器得有地址,设置端口号
serverSocket = new ServerSocket(9999);
//等待客户端链接
socket = serverSocket.accept();
//读取客户端信息
is = socket.getInputStream();
//管道流
baos = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len;
while ((len = is.read(bytes)) != -1) {
baos.write(bytes, 0, len);
}
System.out.println(baos);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (baos != null) {
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
client
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class TestTcpClient {
public static void main(String[] args) {
Socket socket = null;
OutputStream os = null;
try {
//需要知道服务器IP地址,端口号
InetAddress serverIp = InetAddress.getByName("localhost");
//创建一个socket链接
socket = new Socket(serverIp, 9999);
//发送信息
os = socket.getOutputStream();
os.write("hello".getBytes());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
启动服务端后启动客户端发送信息,服务的接收到信息