网络编程1

来源:互联网 发布:华中科技大学软件中心 编辑:程序博客网 时间:2024/05/16 14:10

      1、什么是TCP协议?UDP协议?区别?

      TCP:传输控制协议,面向连接,可靠。保证数据传输成功。

      UDP:不可靠。传输速度快。占系统资源少。


    2TCP三次握手?

    A——》 通信请求以及序列号作为起始数据段。

    B——》 收到请求,序列号作为起始数据段。

    A——》 收到请求



    Java网络编程

    服务端套接字:ServerSocketaccept() bind() close()

    客户端套接字:Socket



5:tcp连接建立的时候3次握手,断开连接的4次握手的具体过程

建立连接采用的3次握手协议,具体是指:
第一次握手是客户端connect连接到server,server accept client的请求之后,向client端发送一个消息,相当于说我都准备好了,你连接上我了,这是第二次握手,第3次握手就是client向server发送的,就是对第二次握手消息的确认。之后client和server就开始通讯了。
断开连接的4次握手,具体如下:
断开连接的一端发送close请求是第一次握手,另外一端接收到断开连接的请求之后需要对close进行确认,发送一个消息,这是第二次握手,发送了确认消息之后还要向对端发送close消息,要关闭对对端的连接,这是第3次握手,而在最初发送断开连接的一端接收到消息之后,进入到一个很重要的状态time_wait状态,这个状态也是面试官经常问道的问题,最后一次握手是最初发送断开连接的一端接收到消息之后。对消息的确认。



package com.server;import java.io.*;import java.net.*;public class TalkServer {    public static void main(String args[]) {        try{            ServerSocket server=null;            try{                //创建一个ServerSocket在端口4700监听客户请求                server=new ServerSocket(4700);            }catch(Exception e){                e.printStackTrace();//出错,打印出错信息            }            Socket socket=null;            try{                //使用accept()阻塞等待客户请求,有客户                socket=server.accept();//请求到来则产生一个Socket对象,并继续执行            }catch(Exception e){                e.printStackTrace();//出错,打印出错信息            }            String line;            //由Socket对象得到输入流,并构造相应的BufferedReader对象            BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));            //由Socket对象得到输出流,并构造PrintWriter对象            PrintWriter os=new PrintWriter(socket.getOutputStream());            //由系统标准输入设备构造BufferedReader对象            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));            //在标准输出上打印从客户端读入的字符串            System.out.println("Client:"+is.readLine());            //从标准输入读入一字符串            line=sin.readLine();            //如果该字符串为 "bye",则停止循环            while(!line.equals("bye")){                //向客户端输出该字符串                os.println(line);                //刷新输出流,使Client马上收到该字符串                os.flush();                //在系统标准输出上打印读入的字符串                System.out.println("Server:"+line);                //从Client读入一字符串,并打印到标准输出上                System.out.println("Client:"+is.readLine());                //从系统标准输入读入一字符串                line=sin.readLine();            }                        os.close(); //关闭Socket输出流            is.close(); //关闭Socket输入流            socket.close(); //关闭Socket            server.close(); //关闭ServerSocket        }catch(Exception e){            e.printStackTrace();//出错,打印出错信息        }    }}

package com.client;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class TalkClient {    public static void main(String[] args) {        try{            //向本机的4700端口发出客户请求            Socket socket=new Socket("127.0.0.1",4700);            //由系统标准输入设备构造BufferedReader对象            BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));            //由Socket对象得到输出流,并构造PrintWriter对象            PrintWriter os=new PrintWriter(socket.getOutputStream());            //由Socket对象得到输入流,并构造相应的BufferedReader对象            BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));            String readline;            readline=sin.readLine(); //从系统标准输入读入一字符串            //若从标准输入读入的字符串为 "bye"则停止循环            while(!readline.equals("bye")){                //将从系统标准输入读入的字符串输出到Server                os.println(readline);                //刷新输出流,使Server马上收到该字符串                os.flush();                //在系统标准输出上打印读入的字符串                System.out.println("Client:"+readline);                //从Server读入一字符串,并打印到标准输出上                System.out.println("Server:"+is.readLine());                readline=sin.readLine(); //从系统标准输入读入一字符串            }            os.close(); //关闭Socket输出流            is.close(); //关闭Socket输入流            socket.close(); //关闭Socket        }catch(Exception e){            e.printStackTrace();//出错,打印出错信息        }    }}


网络编程的执行顺序:

socket:服务器程序调用socket,创建socket


bind:创建完socket之后就是地址的绑定了

listen:

accept

connect







原创粉丝点击