网络编程
IP地址的组成
四个8位的二进制数由三个“.”分割开来
为了好记,改写为十进制的;
IP地址= 网络地址+主机地址
1、网络地址:标识计算机或网络设备所在的网段
2、主机地址:标识特定主机或网络设备
分为:每个【】占8位
A类:【网络】 【主机】【主机】【主机】1~126
B类:【网络】【网络】 【主机】 【主机】128~191
C类:【网络】【网络】【网络】 【主机】192~223
D类:用于组播通信 224~239
E类用于科研 240~255
cmd命令
使用ipconfig在cmd中查看的网络配置
使用ping+ip地址查看本机一次地址的主机网络是否通畅
DNS
Domain Name System,域名系统
服务器
通常指在网络环境下,具有较高的计算能力,能够提供用户服务功能的计算机
1、邮件服务器
2、web服务器
模式介绍
B/S: Browser/Server,浏览器/服务器模式
C/S: Client/Server,客户端/服务器模式
协议
为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合
TCP/IP五层
1、物理层
2、数据链路层
3、网络层 ICMP IGMP IP ARP RARP
4、传输层 TCP UDP
5、应用层 HTTP FTP TFTP SMTP SNMP DNS
Socket
通信链路的端点就被称为“套接字”
1、流式套接字(SOCK_STREAM)【基于TCP】
面向连接、可靠的数据传输服务
2、数据报式套接字(SOCK_DGRAM)【基于UDP】
无连接服务
3、原始式套接字(SOCK_RAW)
常用API
java.net包:
1、Socket
2、ServerSocket
3、DatagramPacket
4、DatagramSocket
5、InetAddress
.......
两种网络通信模型
基于TCP协议的Socket网络通信
用来实现双向安全连接网络通信
Socket通信模型
进行网络通信时,Socket需要借助数据流来完成数据的传递工作
Socket网络编程的步骤:客户端/服务端(C/S)
1、建立连接
2、打开Socket关联的输入输出流
3、数据流中读写信息
4、关闭所有的数据流和Socket
详细步骤
1、user类:需要实现Serializable接口
2、服务器端:通过Socket.getInetAddress()获取InetAddress对象,再用getHostAddress()获取客户端IP
创建ServerSocket对象
ServerSocket serverSocket = new ServerSocket(设置端口号);
//声明Socket获取ServerSocket的accept()方法
Socket socket = serverSocket.accept();
//获取Socket字节输入流方法
InputStream is = socket.getInputStream();
//创建对象输入流
ObjectInputStream ois = new ObjectInputStream(参数是字节输入流);
//创建要接受地对象,并调用readObject()方法
User user = (User)ois. readObject();
//打印输出
System.out.print(user.toString());
3、客户端:
//创建Socket对象,调用它的两个参数的构造方法
Socket socket = new Socket(主机地址 , 端口号);//本机使用localhost,端口根据服务端所设置的端口进行输入
//获取Socket的输出流
OutputStream os = socket.getOutputStream();
//创建对象输出流
ObjectOutputStream oos = new ObjectOutputStream(字节输出流);
//创建要传的对象
User user = new User("admin","123456");
//使用对象输出流写出对象
oos.writeObject(user);
public class LoginServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
InputStream is = null;
BufferedReader br = null;
OutputStream os = null;
BufferedWriter bw = null;
try {
serverSocket = new ServerSocket(8807);
socket = serverSocket.accept();
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String str = null;
while((str = br.readLine())!=null){
System.out.println("我是服务器,接受到的客户端信息为:"+str);
}
os = socket.getOutputStream();
String replay = "登陆成功";
os.write(replay.getBytes());
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
os.close();
br.close();
is.close();
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class LoginClient {
public static void main(String[] args) {
OutputStream os = null;
Socket socket = null;
BufferedWriter bw = null;
InputStream is = null;
BufferedReader br = null;
try {
socket = new Socket("localhost",8807);
os = socket.getOutputStream(