网络:TCP

传输方式:协议:TCP (传输控制协议)、UDP(用户报文协议)

网络四元组:本机IP,对方IP,本机端口,对方端口

TCP

1.TCP协议属于传输层协议,而我们写代码一般是直接使用封装好的tcp工具或者应用层协议来驱动传输层工作
如果我们想在JAVA语言中,驱动TCP协议来传输数据,那么我们可以使用JAVA封装好的工具Socket(套接字)编程实现JAVA给出的TCP套接字就是Socket,需要分清楚服务器和客户端的不同,服务器端使用的是ServerSocket,客户端使用的是Socket。
img#### TCP状态迁移:

1.首先服务器端,必须先开启某一个端口的监听

2.由客户端向服务器的监听端口发起一个SYN请求,其中SYN等于一个数字,SYN = x
发送的时候,客户端需要选择一个自己的端口发送该SYN请求,一般来说,客户端选择的端口都是随机的
但是当选择完这个端口以后,就一直使用这个端口传输数据,在该连接没有断开之前,不会换端口
当发送完SYN请求以后,客户端的该端口状态变成了SYN_SENT状态。

3.当服务器端的监听端口,收到客户端发送的SYN=x这个数据的时候,自己的端口状态就变成了SYN_RECV
同时,向发送SYN的客户端的那个端口回复一个数据,这个数据,包含两条信息,一个是
SYN = y, 另一个是 ACK = x+1

4.当客户端收到服务器发过来的SYN + ACK 消息的时候,客户端就会将端口立刻变化成Establish状态
同时,客户端会发送一条数据给服务器,这个数据是ACK = y+1

5.当服务器收到客户端发来的ACK = y+1 的时候,服务器中的SYN_RECV状态就变成了Establish状态

6.当A发出FIN时,表示A不在会调用输出流了,但是并不表示A的输入流已经使用完成。

举例:
服务器

public class TCPServer {

    public static void main(String[] args){
        ServerSocket ss=null;
        try {
            ss=new ServerSocket(18888);
            Socket s=ss.accept();   //接收

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端

public class TCPClient {

    public static void main(String[] args){
        Socket socket=null;
        try {
            socket=new Socket("127.0.0.1",18888);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值