IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 网络编程小笔记 -> 正文阅读

[系统运维]网络编程小笔记

TCP通讯的两个应用程序:服务端和客户端

  • 服务器端一般负责监听连接

TCP和UDP的区别

  • TCP通讯可靠但效率低(需要连接)
  • UDP通讯不可靠但效率高(不需要连接)

socket

  • socket是设备通信的端点,socket可以让程序将网络连接当成流,数据通过socket进行io操作
  • 个人理解:socket (套间字)是设备通信的端点,socket通过网络连接通道进行i o操作。
    (此处应有图)

TCP字节流编程

  1. 服务端负责监听端口(ServerSocket)并等待连接(ServerSocket.accept)
  2. 客户端负责连接服务端( new Socket(InetAddress+端口号) )
  3. 连接成功后通过socket进行io传输
  4. 注意点
  • 端口只能被一个服务端监听
  • 服务端可以与多个客户端监听
  • 传输完毕后要关闭流
  • 输出完数据结束后要设置结束标记
  1. 代码实现
/**
 * 要求:1.编写服务器端与客户端
 * 2.服务器端在9999端口监听
 * 3、客户端连接到服务器端,发送“hello,server”,并接收服务器端回发的"hello,client"然后退出
 * 4.服务器端收到客户端信息,输出,并回发"hello,client",然后退出
 */

1.服务端

public static void main(String[] args) throws IOException {
        //思路
        //1.监听9999端口
        //创建监听
        ServerSocket serverSocket = new ServerSocket(4399);
        System.out.println("服务器端监听中");

        //2.等待连接
        Socket socket = serverSocket.accept();
        System.out.println("连接成功");

        //3.接受客户端信息 输出
        //获得输入流
        InputStream inputStream = socket.getInputStream();
        //显示信息
        byte[] b = new byte[1024];
        int readlen = 0;
        while ((readlen = inputStream.read(b)) != -1){
            System.out.println(new String(b,0,readlen));
        }

        //4.给客户端回发"hello,client"
        //获得输出流
        OutputStream outputStream = socket.getOutputStream();
        //输出
        outputStream.write(new String("hello,client").getBytes());
        //设置结束标记
        socket.shutdownOutput();




        //5.关闭流  退出
        System.out.println("关闭流 退出噜");
        serverSocket.close();
        socket.close();
        inputStream.close();
        outputStream.close();
    }

2.客户端

public static void main(String[] args) throws Exception {
        //思路
        //1.连接服务器端4399
        Socket socket = new Socket(InetAddress.getLocalHost(), 4399);

        //2.发送hello
        //获得输出流
        OutputStream outputStream = socket.getOutputStream();
        //发送信息
        outputStream.write(new String("hello,server").getBytes());
        //设置结束标记
        socket.shutdownOutput();

        //3.接受信息 并输出
        //获得输入流
        InputStream inputStream = socket.getInputStream();
        //显示信息
        byte[] b = new byte[1024];
        int readlen = 0;
        while ((readlen = inputStream.read(b)) != -1){
            System.out.println(new String(b,0,readlen));
        }

        //4.关闭流 退出
        socket.close();
        outputStream.close();
        inputStream.close();
    }

TCP字节流编程

  • 服务端负责监听端口(ServerSocket)并等待连接(ServerSocket.accept)
  • 客户端负责连接服务端( new Socket(InetAddress+端口号) )
  • 连接成功后通过socket进行io传输
  • 注意点
  • 端口只能被一个服务端监听
  • 服务端可以与多个客户端监听
  • 传输完毕后要关闭流
  • 输出完数据结束后要设置结束标记(socket.shutdown()也可以用bufferedWriter.newLine()
  • 如果使用newLine()作为结束标记 对方需要用readline()接收数据
  • 代码实现
    1. 服务端
public static void main(String[] args) throws IOException {
        //思路
        //1.监听9999端口
        //创建监听
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务器端监听中");

        //2.等待连接
        Socket socket = serverSocket.accept();
        System.out.println("连接成功");

        //3.接受客户端信息 输出
        //获得输入流
        InputStream inputStream = socket.getInputStream();
        //转换成字符流
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        //显示信息
        String s;
        while ((s=bufferedReader.readLine()) != null){
            System.out.println(s);
        }




        //5.关闭流  退出
        System.out.println("关闭流 退出噜");
        serverSocket.close();
        socket.close();
        bufferedReader.close();
//        outputStream.close();
    }

2.客户端

public static void main(String[] args) throws Exception {
        //思路
        //1.连接服务器端9999
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);

        //2.发送hello
        //获得输出流
        OutputStream outputStream = socket.getOutputStream();
        //转换成字符输出流
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
        //输出信息
        bufferedWriter.write("hello,小黄");
        bufferedWriter.newLine();
        bufferedWriter.write("hello,小黄");
        //设置结束标记  socket.shutdown()也可以用bufferedWriter.newLine()
        //注意! 如果使用newLine()作为结束标记 对面需要用readline()接收数据
        bufferedWriter.flush(); // 注意 写完要手动flush()一下
        bufferedWriter.newLine();

        //4.关闭流 退出
        System.out.println("关闭流 退出噜");
        bufferedWriter.close();
        socket.close();
//        inputStream.close();
    }
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 11:16:52  更:2022-08-06 11:21:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 19:47:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码