zoukankan      html  css  js  c++  java
  • socket通信

    socket通信分为tcp协议以及udp协议,

      tcp协议与udp协议的区别

      tcp没有大小限制,upd有大小限制

      udp效率更高,tcp效率不高,因为tcp每次都需要握手,而udp不需要握手

      tcp要建立连接要经历三次握手,第一次:告诉服务器,我来了;第二次:服务器收到请求后,告诉客户端,我知道了,你可以传数据了;第三次:客户端收到服务器的确认信息,告诉服务器我要开始传数据了。tcp协议传输数据是即时的,即客户端发送数据后,服务器当时就能收到数据,因此要维护连接状态。

      而udp协议并不需要三次握手,使用udp协议传数据前,客户端与服务器之间不建立连接,因此也就不需要维护连接状态。

    使用tcp协议简单的创建一个数据连接服务器以及客户端

    import java.io.BufferedInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务器端程序流程
     * 1.打开指定端口的服务器端对象ServerSocket
     * 2.等待客户端的连接
     * 3.读取客户端信息
     * 4.关闭连接
     */
    public class SocketServer {
        public static void main(String[] args) {
            ServerSocket ss = null;
            Socket socket = null;
            try {
                /*1.创建服务器对象*/
                ss = new ServerSocket(9999);
                /*2.等待客户端的连接,如果没有客户端的连接,那么线程会一直处于阻塞状态,当有客户端连接时,程序才会向下运行*/
                socket = ss.accept();
                System.out.println("客户端ip"+socket.getInetAddress()+"发出请求");
                /*获取输出流,读取客户端发送的数据*/
                InputStream in = socket.getInputStream();
                /*创建数组对象,读取数据*/
                byte[] b = new byte[1024];
                int len =0 ;
                in.read(b);
                String s = new String(b, 0, b.length);
                System.out.println("客户端数据为:"+s);
    
                /*获取输入流,给客户端响应数据*/
                OutputStream out = socket.getOutputStream();
                out.write("好了好了,我知道了,不要再说了".getBytes());
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    ss.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class ClientDemo {
        public static void main(String[] args) {
            Socket socket = null;
            try {
                /*1.得到指定ip,指定端口的服务器端的连接*/
                socket = new Socket("127.0.0.1", 9999);
                /*获取输入流,向服务器端发送数据*/
                OutputStream out = socket.getOutputStream();
                out.write("hello world".getBytes());
    
                Thread.sleep(10000);
    
                /*获取输出流对象,读取服务器的响应*/
                InputStream in = socket.getInputStream();
                byte[] b = new byte[1024];
                int len = 0;
                while ((len = in.read(b))!=-1) {
                    String s = new String(b, 0, len);
                    System.out.println("服务器响应为" + s);
                }
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    以上代码因为执行速度不一样,因此可能服务器响应前客户端就执行完了,因此可以打断点来获取服务端响应

      

  • 相关阅读:
    合并vector里的内容,输出一个string
    免费矢量图标下载【转载】
    NX二次开发-UFUN打开选择文件夹对话框UF_UI_create_filebox
    Windows路径操作API函数学习【转载】
    NX二次开发-UFUN设置对象线型UF_OBJ_set_font
    NX二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突【转载】
    NX二次开发-UFUN将工程图中的点坐标映射到建模绝对坐标UF_VIEW_map_drawing_to_model
    NX二次开发-UFUN将建模绝对空间中的点映射到工程图坐标UF_VIEW_map_model_to_drawing
    NX二次开发-UFUN CSYS坐标系转换UF_CSYS_map_point
    VC操作Excel之基本操作(颜色等)【转载】
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11135070.html
Copyright © 2011-2022 走看看