zoukankan      html  css  js  c++  java
  • Socket之tcp

    作用:完成两个应用程序之间的数据传输

    含义:套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元,由IP地址和端口结合的,提供向应用层进程传送数据包的机制。

    工作流程:要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,我们称之为 Client Socket,另一个运行于服务器端,我们称之为 Server Socket

    1.服务器端监听 2.客户端发起请求 3.服务器端收到请求,响应给客户端确认,建立连接

    Socket是什么?它在哪里?

    根据五层网络模型,

     

                       物理层

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,对开发人员来说,我们不需要彻底搞懂tcp/ip协议具体怎么工作,合理使用socket接口

    就已经符合指定的协议

    一个小例子先看看具体怎么写:

    客户端

    package com.company;
    
    import java.io.IOException;
    import java.net.Socket;
    import java.util.logging.Logger;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
        // write your code here
            Logger log= Logger.getGlobal();
            log.info("客户端启动");
    
            Socket socket=new Socket("localhost",53);//初始化客户端socket,定服务绑器ip,端口号
        }
    }

    服务端:

    package com.company;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.logging.Logger;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            Logger log=Logger.getGlobal();
            log.info("server run");
    
    
            ServerSocket serverSocket=new ServerSocket(53);//初始化服务端socket,绑定端口
            log.info("准备进行监听,随时接受客户端连接");
            Socket socket=serverSocket.accept();//调用accept阻塞监听端口,等待客户端连接,接受到后才继续执行下面
            log.info("这句执行,说明阻塞状态结束,已经获取请求");
            if(socket!=null){
                log.info("确实收到请求了");
            }
        }
    }

     范例二,上面是联通了,然后在联通基础上进行收发数据

    package com.company;
    
    import java.io.*;
    import java.net.Socket;
    import java.util.logging.Logger;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
        // write your code here
            Logger log= Logger.getGlobal();
            log.info("客户端启动");
    
            //建立到服务端的连接
            Socket socket=new Socket("localhost",53);//初始化客户端socket,绑定服务绑器ip,端口号
    
            //发送数据
            OutputStream out=socket.getOutputStream();
            //包装为高级输出流
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(out));
            bw.write("0101,我是08,收到请回答!
    你好
    ");
            bw.flush();
            log.info("发送数据完毕");
    
            //包装为高级输入流,接收数据
            InputStream in=socket.getInputStream();
            BufferedReader br=new BufferedReader(new InputStreamReader(in));
            String mess=br.readLine();
            log.info(mess);
    
    
    
    
        }
    }
    package com.company;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.logging.Logger;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
            //打日志
            Logger log=Logger.getGlobal();
            log.info("server run");
    
            ServerSocket serverSocket=new ServerSocket(53);
            log.info("初始化服务,等待客户端请求");
            Socket socket=serverSocket.accept();//阻塞监听,等待接受客户端请求
            log.info("客户端:"+serverSocket.getInetAddress().getLocalHost()+"已连接到服务器");
            //获取输入流对象,转换为InputStreamReader,再包装为BufferedReader,接收数据
            BufferedReader bf= new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String mess=bf.readLine();//一次读一行,
    标识一行
            log.info(mess);
    
            //返回数据到服务器
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
            bw.write("0808,01已收到,请说事,over!
    ");
            bw.flush();
            
    
    
        }
    }
  • 相关阅读:
    024_Python3 filter 函数高级用法
    023_Python3 map 函数高级用法
    022_Python3 lambda函数高级用法
    #整体二分,树状数组#洛谷 3332 [ZJOI2013]K大数查询
    #线段树分治,线性基,并查集#CF938G Shortest Path Queries
    #RMQ,动态开点线段树#CF803G Periodic RMQ Problem
    #二分图匹配#UVA1194 Machine Schedule
    #树状数组套线段树#洛谷 1975 [国家集训队]排队
    #分治,Dijkstra#洛谷 3350 [ZJOI2016]旅行者
    #线段树,离线#CF1000F One Occurrence
  • 原文地址:https://www.cnblogs.com/hebiao/p/14392090.html
Copyright © 2011-2022 走看看