简单网络通信

一、TCP/IP protocol

TCP/IP协议族
1.分为四层:应用层(FTP、DNS、HTTP)、传输层(TCP\UDP)、网络层、数据链路层(硬件)。

2.传输流程:(发送端从应用层往下走,接收端从链路层网上走)

例如客户端是发送端,服务器是接收端:客户端从上到下到链路层,找到服务器的链路层,再从下到上传到应用层。

发送端每通过一层增加上该层的首部信息,接收端每通过一层删除该层的首部信息。这种把信息包装起来的方法叫做封装。

3.TCP协议的作用:请求端把HTTP请求报文分割成有序号的数据包+服务端按序号组合接收到的数据包

4.IP协议的作用:通过路由器,一边中转一边送达数据包。

5.HTTP协议的作用:请求端生成请求报文+服务端分析处理TCP层按序号组合好的请求报文。

6.TCP著名的三次握手

众所周知,TCP协议提供可靠的字节流服务(把HTTP请求报文分割成数据包),那么为什么可靠呢?因为使用TCP协议发送完数据包后,发送端会与接收端进行三次握手:
第一次:发送端发送一个标有SYN的数据包
第二次握手:接收端接收到以后,回发一个标有SYN/ACK的数据包
第三次握手:发送端接收到,发送标有ACK的数据包。
ps:SYN和ACK都是TCP的标志。
如有哪个环节莫名中断,TCP协议会重复这个三次握手过程。

二、简单socket网络编程(Java实现)

服务端代码

import java.util.Scanner;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class server {

    public static void main(String[] args) throws Exception{

        //1.创建一个服务端socket
        ServerSocket serverSocket=new ServerSocket(8888);
        //2调用accept方法等待连接,线程会阻塞状态
        System.out.println("Socket服务已启动,等待连接");
        Socket socket=serverSocket.accept();
        System.out.println("接收到客户端连接请求");
        //3.实现数据的交互
        //获取输入流
        InputStream inputStream= socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(inputStream);
        BufferedReader br=new BufferedReader(isr);

        String  info=null;
        while((info=br.readLine())!=null){//循环读取信息
            System.out.println("收到客户端的请求:"+info);
        }
        socket.shutdownInput();

        //4.获取输出流,相应客户端请求
        OutputStream os=socket.getOutputStream();
        PrintWriter out=new PrintWriter(os);
        out.write("这是server端");
        out.flush();



        //关闭资源
        out.close();
        os.close();

        br.close();
        isr.close();
        isr.close();
        socket.close();
        serverSocket.close();
    }
}

客户端代码

import java.io.*;
import java.net.Socket;

public class client {
    public static void main(String[] args)throws Exception {

        //1.创建Socket客户端,指定服务器和端口
        Socket socket=new Socket("127.0.0.1",8888);

        //2.连接成功后发送信息
        //获取输出流
       OutputStream outputStream=socket.getOutputStream();
       PrintWriter out=new PrintWriter(outputStream);
       out.write("admin,admin");
       out.flush();

//这一句很重要,要写在前面,如果不写在这里,Socket Server 端的代码就会卡在读取inputStream中
        socket.shutdownOutput();

       //3.获取输入流得到服务器端的响应
        InputStream inputStream= socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(inputStream);
        BufferedReader br=new BufferedReader(isr);

        String  info=null;
        while((info=br.readLine())!=null){//循环读取信息
            System.out.println("收到服务端的响应:"+info);
        }


        br.close();
        isr.close();
        out.close();

       out.close();
       socket.close();


    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值