计算机网络
为了实现资源共享和信息传递,通过通信线路连接起来的若干主机(Host)
- 互联网:(Internet)点与点相连
- 万维网:(WWW - World Wide Web)端与端相连
- 物联网:(IoT - Internet of things)物与物相连
- 网络编程:让计算机与计算机之间建立连接、进行通信。
TCP/UDP协议
TCP协议(三次握手,四次挥手,传输控制协议)
- 是一种面向连接的、可靠的、基于字节流的传输层通信协议。数据大小无限制。建立连接的过程需要三次握手,断开连接的过程需要四次挥手
UDP协议(用户数据报协议)
- 是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,每个包的大小是64kb。
IP协议
Internet Protocol Address互联网协议地址/网际协议地址
- 分配给互联网设备的数字标签
IP协议分为两种,一种是IPV4,一种是IPV6
- IPV4:4字节32位整数,并分为4段8位的二进制数,每8位之间用圆点隔开,每8位整数可以转换为一个0~255的十进制整数。
- IPV4分为A~E类,A类的主要用于政府机构,其范围是1.0.0.1 ~126.255.255.254,B类主要用于中型企业,范围是128.0.0.1 ~ 191.255.255.254,C类适用于个人用户,一般是192.0.0.1 ~ 223.255.255.254,其中D类和E类比较少用,D类(224.0.0.1 ~ 239.255.255.254),E类(240.0.0.1 ~ 255.255.255.254)
- 回环地址:127.0.0.1,指本机(localhost),一般用于测试使用
- 常用dos命令:ipconfig(查看IP),ping D.D.D.D(测试IP是否可通)
Port(端口)
端口号:在通信实体上进行网络通讯的程序的唯一标识,一般通过端口来指向系统中某个软件。
端口分类:
- 公认端口:0 ~ 1023
- 注册端口:1024 ~ 49151
- 动态或私有端口:49152 ~ 65535
常用端口:
- MySql:3306
- Oracle:1521
- Tomcat:8080
- SMTP:25
- Web服务器:80
- FTP服务器:21
InetAddress类
表示互联网协议(IP)地址对象,封装了与该IP地址相关的所有信息,并提供获取信息的常用方法。
方法
- public static InetAddress getLocalHost()
获取本地主机对象- public static InetAddress getByName(String host)
根据主机名称获得地址对象- public static InetAddress[] getAllByName(String host)
获得所有相关地址对象- public String InetAddress getHostAddress()
获取IP地址字符串- public String getHostName()
获得IP地址主机名
基于TCP的网络编程(服务端/客户端)
服务端代码示例
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
//完成客户端发送消息给服务端,并且服务端回答消息给客户端;
//服务器端
public class DemoServer {
public static void main(String[] args) {
//新建服务器
try{
//新建服务器端
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务器已开启,等待接入接入中...");
//打开服务器端,等待客户端接入
Socket accept = serverSocket.accept();
//获取接入服务器的ip对象
InetAddress inetAddress = accept.getInetAddress();
System.out.println("用户:"+inetAddress.getHostName()+"已接入,ip:"+inetAddress.getHostAddress());
//获取服务器到客户端的字节输出流
OutputStream outputStream = accept.getOutputStream();
//将字节输出流转换为字符输出流
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
//向客户端发送数据
//bufferedWriter.write("你好,"+inetAddress.getHostName()+","+inetAddress.getHostAddress());
bufferedWriter.write("你好啊,客户端\n");
//清空输出流
bufferedWriter.flush();
//获取客户端到服务器的输入流
InputStream inputStream = accept.getInputStream();
//将字节输入流转成字符输入流
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//从客户端接收数据
String string = bufferedReader.readLine();
System.out.println("来自客户端的信息:"+string);
}catch (IOException ex){
ex.printStackTrace();
}
}
}
客户端代码示例
import java.io.*;
import java.net.Socket;
//客户端
public class DemoClient {
public static void main(String[] args) {
int port = 9999;//服务端端口号
String ip = "127.0.0.1";//服务端ip,这里是本地回环地址
try {
Socket socket = new Socket(ip, port);
//获得输入流
InputStream inputStream = socket.getInputStream();
//转为缓冲读取流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
System.out.println("来自服务器的消息:"+bufferedReader.readLine());
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
//获取输出流
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write("你好啊,服务器端!\n");
bufferedWriter.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}