zoukankan      html  css  js  c++  java
  • java中的网络通信编程之TCP篇

    java中的网络通信编程分为两种,1、TCP(传输控制协议)方式。2、UDP(用户数据报协议)方式。

    1、TCP(传输控制协议)方式

    使用这种网络通信方式的时候,需要建立专门的虚拟连接,然后才能进行可靠的数据传输,如果数据传输失败,则客户端会自动重发该数据。

    2、UDP(用户数据报协议)方式。

    这种方式就像是手机之间发送短信,无需建立专门的链接,但是传输也是不可靠的,如果短信发送失败的话,则服务端是收不到数据的。

    这两种方式都是经常用到的,重要的数据一般都是采用tcp的方式来进行传输,大量的非重要数据可以采用udp的方式来进行传输,由于tcp需要建立连接并以及确认传输是否正确,所以它比udp要多花费一些时间,而且传输时,产生的数据量要比udp方式要大一些。

    总结一些tcp和udp的区别

    UDP是一种不可靠的传输协议,它不能保证每次传输的数据包都是按次序到达的。

    TCP是一种可靠的传输协议,它确保接受方完全正确的接收了发送方发送的所有数据。

    UDP传输数据的时候有大小限制,每个数据报大小不能超过64KB。

    TCP则没有限制,它们在socket之间按照统一的格式,传多少都没问题。

    UDP不需要建立连接就可以传输数据,因为它所传输的数据报中都已经包含接收方完整的地址

    TCP则不然,它必须建立链接,在socket之间传输必须要建立连接,所有它比UDP多了一个建立连接的时间。

    UDP操作简单,TCP生命力强。


    客户端网络编程

    1、建立连接

    建立连接的时候需要指定连接到服务器的ip地址和端口号,建立完成后就会形成一条虚拟连接,后面的交换数据就会通过这条连接来进行。

    2、交换数据

    交换连接的时候严格按照请求的响应模型,客户端将请求数据发送给服务端,服务端根据请求的数据作出相应的响应,将数据按照相应模型反馈给客户端。

    3、关闭连接

    当数据交换完成后,就会断开连接,释放端口、内存等资源。

    步骤2可以根据业务逻辑的需要,重复进行。


    服务端网络编程

    1、监听端口

    服务端所要做的就是监听本地的某个端口,这个端口就是服务端开放给客户端的端口。

    2、获取连接

    当服务端连接到服务端的时候,就会获取一个连接,连接中包含客户端的ip地址等信息,交换数据的时候就是通过此链接进行交换数据。每一个连接都是由一个专门的线程独立处理该连接。

    3、交换数据

    服务端的交换数据的过程和客户端的不同,服务端是先接受来自客户端的数据,在进行相应的逻辑处理后,将得到的数据发送给客户端。

    4、关闭连接

    交换完成后,就会关闭这个连接,同时释放其所监听的端口、内存等资源。


    举例说明:

    客户端
    1) 建立Socket连接 
    Socket socket1 = new Socket(“http://blog.csdn.net/jessonlv”,80);


    2)按照“请求-响应”模型进行网络数据交换
    在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。示例代码如下:
     OutputStream os = socket1.getOutputStream(); //获得输出流
     InputStream is = socket1.getInputStream();     //获得输入流
    这里获得的只是最基本的输出流和输入流对象,还可以根据前面学习到的IO知识,使用流的嵌套将这些获得到的基本流对象转换成需要的装饰流对象,从而方便数据的操作。

    3)关闭网络连接
     socket1.close();

    public class Constants {  
      
        public static void main(String[] args) {  
            ServerSocket serverSocket = null;  
            Socket socket = null;  
            OutputStream os = null;  
            InputStream is = null;  
            // 监听端口号  
            int port = 10000;  
            try {  
                // 建立连接  
            serverSocket = new ServerSocket(port);  
                // 获得连接  
                socket = serverSocket.accept();  
                // 接收客户端发送内容  
                is = socket.getInputStream();  
                byte[] b = new byte[1024];  
                int n = is.read(b);  
                // 输出  
                System.out.println("客户端发送内容为:" + new String(b, 0, n));  
                // 向客户端发送反馈内容  
                os = socket.getOutputStream();  
                os.write(b, 0, n);  
            } catch (Exception e) {  
            e.printStackTrace();  
            } finally {  
                try {  
                    // 关闭流和连接  
                    os.close();  
                    is.close();  
                    socket.close();  
                    serverSocket.close();  
                } catch (Exception e) {  
                }  
            }  
        }  
    }  


  • 相关阅读:
    js之oop <四>对象管理
    收集的一些前端面试题(持续更新)
    js之oop <三>属性标签
    js之oop <二> 对象属性
    js之oop <一> 创建对象,构造器(class)
    PHP_$_SERVER_说明详解
    利用jquery实现网站中对应栏目下面内容切换效果。
    网站中通知公告栏目滚动提示的效果
    图片上传利用<iframe></iframe>标签实现无刷新上传图片
    phpcms v9 数据库操作函数
  • 原文地址:https://www.cnblogs.com/jessonlv/p/4387993.html
Copyright © 2011-2022 走看看