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();
    
            }
    
    }
    }
    
  • 相关阅读:
    ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
    ACM/ICPC 之 三维计算几何+暴力枚举+判重(HDU5839)
    ACM/ICPC 之 有流量上下界的网络流-Dinic(可做模板)(POJ2396)
    ACM/ICPC 之 Dinic+枚举最小割点集(可做模板)(POJ1815)
    ACM/ICPC 之 DP解有规律的最短路问题(POJ3377)
    ACM/ICPC 之 DFS+SPFA-贪心+最短路(POJ2679)
    ACM/ICPC 之 靠墙走-DFS+BFS(POJ3083)
    maven的setting.xml配置文件详解(中文)
    高性能、高可用的分布式架构体系(有启发的)
    各种数据库再spring中的配置(转载)
  • 原文地址:https://www.cnblogs.com/francisforeverhappy/p/JavaSocketBlog.html
Copyright © 2011-2022 走看看