• Java socket笔记


    1. 概述

    socket是基于应用服务与TCP/IP通信之间的一个抽象,他将TCP/IP协议里面复杂的通信逻辑进行分装,对用户来说,只要通过一组简单的API就可以实现网络的连接。

    1. socket基本示例(single thread)
      服务端
    import java.io.BufferedReader;
    
    import java.io.BufferedWriter;
    
    import java.io.IOException;
    
    import java.io.InputStreamReader;
    
    import java.net.ServerSocket;
    
    import java.net.Socket;
    
    public class ServerSocketTest {
    
    public static void main(String[] args) {
    
    try {
    
              // 初始化服务端socket并且绑定9999端口
    
                ServerSocket serverSocket  =new ServerSocket(9999);
    
                //等待客户端的连接
    
                Socket socket = serverSocket.accept();
    
                //获取输入流
    
                BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
    
                //读取一行数据
    
                String str = bufferedReader.readLine();
    
                //输出打印
    
                System.out.println(str);
    
            }catch (IOException e) {
    
              e.printStackTrace();
    
            }
    
    }
    }
    

    客户端:

    public static void main(String[] args) {
    
    try {
    
                Socket socket =new Socket("127.0.0.1",9999);
    
                BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    
                String str="你好,这是我的第一个socket";
    
                 bufferedWriter.write(str);
    
                //刷新输入流
    
                bufferedWriter.flush();
    
                //关闭socket的输出流
    
                socket.shutdownOutput();
            }catch (IOException e) {
    
                e.printStackTrace();
    
            }
    
    }
    
    1. socket基本示例(multi-thread)
    public static void main(String[] args)throws IOException {
    
    // 初始化服务端socket并且绑定9999端口
    
            ServerSocket serverSocket =new ServerSocket(9999);
    
            //创建一个线程池
    
            ExecutorService executorService = Executors.newFixedThreadPool(100);
    
            while (true) {
    
    //等待客户端的连接
    
                Socket socket = serverSocket.accept();
    
                Runnable runnable = () -> {
    
    BufferedReader bufferedReader =null;
    
                    try {
    
    bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
    
                        //读取一行数据
    
                        String str;
    
                        //通过while循环不断读取信息,
    
                        while ((str = bufferedReader.readLine()) !=null) {
    
    //输出打印
    
                            System.out.println("客户端说:" + str);
    
                        }
    
    }catch (IOException e) {
    
    e.printStackTrace();
    
                    }
    
    };
    
                executorService.submit(runnable);
    
            }
    
    }
    

    客户端:

    public static void main(String[] args) {
    
    try {
    
    //初始化一个socket
    
                Socket socket =new Socket("127.0.0.1",9999);
    
                //通过socket获取字符流
    
                BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    
                //通过标准输入流获取字符流
    
                BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(System.in,"UTF-8"));
    
              while (true){
    
    String str = bufferedReader.readLine();
    
                  bufferedWriter.write(str);
    
                  bufferedWriter.write("
    ");
    
                  bufferedWriter.flush();
    
              }
    
    }catch (IOException e) {
    
    e.printStackTrace();
    
            }
    
    }
    }
    
  • 相关阅读:
    ESP8266型号对比
    Arduino安装ESP8266开发库
    ESP8266驱动I2C OLED显示屏
    爬虫与反爬技术汇总
    爬虫之爬取某道技术分析
    爬虫之12306模拟登陆和购票
    web开发之用户单点登陆和多用户登陆实现
    爬虫中如何获取图片验证码
    web开发中图片保存问题
    python的缓存机制
  • 原文地址:https://www.cnblogs.com/francisforeverhappy/p/JavaSocketBlog.html
Copyright © 2020-2023  润新知