zoukankan      html  css  js  c++  java
  • 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();
    
            }
    
    }
    }
    
  • 相关阅读:
    python学习笔记(五)---sublime text 多行代码注释快捷键
    python学习笔记(四)---python不能输出中文问题
    python学习笔记(三)---python关键字及其用法
    python学习笔记(二)---编辑工具sublimeText3运行python
    python学习笔记(一)---python下载以及环境的安装
    idea上查看本文件svn修改的历史版本
    关于app
    Git 上传文件到 码云 gitee
    Vue 图片引入
    Eslint 规则说明
  • 原文地址:https://www.cnblogs.com/francisforeverhappy/p/JavaSocketBlog.html
Copyright © 2011-2022 走看看