第九章 网络编程
IP地址
32位,由4个8位二进制数组成
查看本机的IP地址 ipconfig
测试网络是否通畅 ping
五层协议
1.物理层:基于电器特性的高低电压(电信号)高电压代表1 低电压代表0
2.数据链路层:定义电信号的分组方式
3.网络层:引入一套新的地址来区分不同的广播域
4.传输层:端口到端口的连接通信
5.应用层:(应用层,表示层,会话层):规定了数据的传输格式 ftp,http,www
Socket
称为“套接字”(英文名Socket)
TCP协议
面向连接
三次握手四次挥手 A (客户端) B (服务端)
三次握手(建立连接)
1.(A->B)携带syn数据包
A问B 你能收到我的消息吗?
2.(B->A)如果B同意连接则回复消息同意,向A发送syn+ack
B回答我收到了,你能收到我的消息吗?
3.(A->B)A在向B发送ack数据包
A回答,我收到了,开始通信
四次挥手(关闭连接)
1.(A->B)发送fin包
我要关闭,等你确认
2.(B->A)发送ack包,此时B会进入等待关闭状态
B说稍等,等待关闭
3.(B->A)发送fin包,进入最后确认状态
确认完成,可以关闭了
4.(A->B)A收到后回复ack包,进入超时等待状态。等待结束关闭A,B收到ack后立即关闭连接。A确认关闭,B立即关闭
tcp对象传递
package Work02;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
public class StudentClient {
public static void main(String[] args) {
System.out.println("-----客户端-----");
Socket socket = null;
OutputStream os = null;
ObjectOutputStream oos = null;
try {
socket = new Socket("localhost", 8888);
os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
oos.writeObject(new Student("张三",20));
System.out.println("发送成功");
}catch (Exception e){
e.printStackTrace();
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package Work02;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class StudentServer {
public static void main(String[] args) {
System.out.println("----服务器----");
ServerSocket serverSocket = null;
Socket socket = null;
InputStream is =null;
ObjectInputStream ois = null;
try{
serverSocket = new ServerSocket(8888);
socket = serverSocket.accept();//监听
is = socket.getInputStream();
ois = new ObjectInputStream(is);
Student student = (Student) ois.readObject();
System.out.println(student);
}catch (Exception e){
e.printStackTrace();
}finally {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
package Work02;
import java.io.Serializable;
public class Student implements Serializable {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
UDP协议
非面向连接
原文地址:https://blog.csdn.net/weixin_44348113/article/details/142592554
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!