JAVA学习十一:网络编程

    科技2024-05-11  86

    UDP协议 用户数据报协议:UDP协议是一个面向无连接的协议。传输数据时,不需要建立连接,不管对方服务器是否启动。直接将数据、数据源和目的地都封装在数据包中,直接发送。每个数据包的大小限制在64k以内。它是不可靠协议,因为无连接,所以传输速度快,但是容易丢失数据。日常应用中,例如视频会议、QQ聊天等。

    网络编程程序的分类 1.B/S程序: 浏览器与服务器程序 2.C/S程序: 客户端与服务器程序

    TCP协议-OSI网络模型 指的是从一台计算机的软件中,将数据发送到另一台计算机的软件中的过程。 七层网络模型:应用层/表现层/会话层/传输层/网络层/数据链路层/物理层

    三次握手和四次挥手熟悉 tcp协议客户端与服务器连接时,存在三次握手操作,确保消息能准确无误的发送。断开连接时,存在四次挥手操作。

    TCP协议的C/S程序 需要使用到两个类,来编写TCP协议的cs程序 。 1.ServerSocket 2.Socket搭建客户端 两方使用socket(套接字,通信端点)进行交流。

    ServerSocket(服务器) 用于创建服务器,创建完毕后,会绑定一个端口号 然后此服务器可以等待客户端连接 每连接一个客户端。服务器就会得到一个新的Socket对象,用于跟客户端通信。

    常用构造方法:

    ServerSocket(int port);****

    创建一个基于TCP/IP协议的服务器,并绑定指定端口号。 注意:参数port的范围是:0-65535(建议1025-65535)。

    常用方法:

    Socket accept();****

    等待客户端连接, 此方法会导致线程的阻塞! 直到一个新的客户端连接成功,return Socket对象后,线程再继续执行。

    void close();

    释放占用的端口号,关闭服务器。

    Socket(套接字) 是两台计算机之间通信的端点,是网络驱动提供给应用程序编程的一种接口,一套标准,一种机制。

    构造方法:

    Socket(Stirng ip,int port) ****

    创建一个套接字,并连接指定ip和端口号的服务器。 参数1. 服务器的ip地址 参数2. 服务器软件的端口号

    常用方法:

    -OutputStream getOutputStream();

    返回的是,指向通信的另一端点的输出流

    -InputStream getInputStream();

    返回的是,指向通信的另一端点的输入流

    -void close();

    关闭套接字

    注意:在网络编程中,获取输入输出流的操作,对于客户端和服务器来说是相对的。 客户端的输入流,输入的是服务器的输出流 输出的内容。 客户端的输出流,输出到了服务器的输入流中。 所以在使用时,需要注意一下规则: 客户端与服务器获取流的顺序必须相反 例如:客户端先得到了输入流,服务器必须先获取输出流。

    代码案例:

    //服务器代码 public static void main(String[] args) throws IOException{ //搭建服务器 ServerSocket server = new ServerSocket(55565); System.out.println(“服务器启动完毕”); //等待客户端的连接 Socket socket = server.accept(); System.out.println(“一个客户端连接了”); //建立输出流 OutputStream os = socket.getOutputStream(); //将输出流转换为打印流 PrintStream ps = new PrintStream(os); ps.println(“欢迎你连接服务器”); InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String text = br.readLine(); System.out.println(“服务器收到客户端的回复”+text); System.out.prrintln(“服务器程序执行结束”); } //客户端代码 public static void main(String[] args) throws IOException{ //连接服务器 Socket socket = new Socket(“localhost”,55565); InputStream is = socket.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String text = br.readLine(); System.out.println(“客户端接到消息”+text); OutputStream os = socket.getOutputStream(); PrintStream ps = new PrintStream(os); ps.print(“服务器你好”); //多线程服务器 //使用while循环连接多台客户端 while(true){ Socket socket = server.accept(); //当接收客户端连接时花费了10分钟。那么线程就会阻塞10分钟。 //此时可以单独开条线程,每连接一台客户端就开一条单独的线程。 new Thread(){ try{ InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); }catch(IOException e){ e.printStackTrace(); } }.start(); System.out.println(“一个客户端连接了”); }
    Processed: 0.024, SQL: 8