网络编程 p4 TCP编程

这篇具有很好参考价值的文章主要介绍了网络编程 p4 TCP编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

TCP编程

  • 基本介绍

    1. 基于客户端——服务端的网络通信;
    2. 底层使用的是TCP/IP协议;
    3. 应用场景举例:客户端发送数据,服务端接收并显示在控制台;
    4. 基于Socket的TCP编程;
  • 示意图

网络编程 p4 TCP编程

  • netstat指令

    1. netstat -an可以查看当前主机网络情况,包括端口监听情况和网络连接情况;

    2. netstat -an|more可以分页显示;

    3. 要求在dos控制台下执行 (win+r)

      说明:

      • Listening 表示某个端口在监听;
      • 如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息;

    网络编程 p4 TCP编程

  • 注意事项

    1. 当客户端连接到服务端后,实际上客户端也是通过一个端口和服务端进行通讯的,这端口是TCP/IP来分配的,是随机的;
      网络编程 p4 TCP编程
  • 应用案例

    网络编程 p4 TCP编程

    • 客户端

      package com.hspedu.socket;
      
      import java.io.*;
      import java.net.InetAddress;
      import java.net.Socket;
      
      /**
       * @author: 86199
       * @date: 2023/5/15 15:18
       * @description: 字符流
       */
      public class SocketTCP03Client {
          public static void main(String[] args) throws IOException {
              //思路
              //1. 连接服务端(ip,端口)
              //解读:连接本机的 9999 端口,如果连接成功,返回Socket对象
              Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
              System.out.println("客户端 socket返回 = " + socket.getClass());
              //2. 连接上后,生成Socket,通过socket.getOutputStream()
              //  得到和socket对象关联的输出流对象
              BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
              //3. 通过输出流,写入数据到 数据通道
              bufferedWriter.write("hello, server");
              bufferedWriter.newLine();//写入一个换行符,表示写入内容结束,要求对方使用readLine的方式来读
              bufferedWriter.flush();//如果使用的字符流,需要手动刷新否则数据不会写入数据通道
      
      
              //4. 通过socket.个体InputStream()读取客户端写入到数据通道的数据,显示
              BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
              String s = bufferedReader.readLine();
              System.out.println(s);
      
              //5. 关闭流对象和socket,必须关闭
              bufferedReader.close();
              bufferedWriter.close();
              socket.close();
      
          }
      }
      
    • 服务端

      package com.hspedu.socket;
      
      import java.io.*;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      /**
       * @author: 86199
       * @date: 2023/5/15 15:18
       * @description: 字符流
       */
      public class SocketTCP03Server {
          public static void main(String[] args) throws IOException {
              //思路
              //1. 在本机的9999端口监听,等待连接
              //   细节:要求本机没有其他服务在监听9999
              //   这个 ServerSocket 可以通过accept() 返回多个Socket[多个客户端连接服务器的并发]
              ServerSocket serverSocket = new ServerSocket(9999);
              System.out.println("服务端,在9999端口监听,等待连接...");
              //2. 当没有客户端连接9999端口时程序会阻塞,等待连接
              //   如果有客户端连接,则会返回Socket对象,程序继续
              Socket accept = serverSocket.accept();
      
              System.out.println("服务端 socket = " + accept.getClass());
      
              //3. 通过socket.个体InputStream()读取客户端写入到数据通道的数据,显示
              BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(accept.getInputStream()));//读不到内容会阻塞
      //4. IO读取
              String s = bufferedReader.readLine();
              System.out.println(s);
      
      
      
              //5. 通过输出流,写入数据到 数据通道
              BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
              bufferedWriter.write("hello, client");
              bufferedWriter.newLine();//写入一个换行符,表示写入内容结束,要求对方使用readLine的方式来读
              bufferedWriter.flush();//如果使用的字符流,需要手动刷新否则数据不会写入数据通道
              //设置结束标记
      
              //6. 关闭流对象和socket,必须关闭
              bufferedWriter.close();
              bufferedReader.close();
              accept.close();
              serverSocket.close();
          }
      }
      
      

    网络编程 p4 TCP编程

    • StreamUtils类

      package com.hspedu.upload;
      
      import java.io.BufferedReader;
      import java.io.ByteArrayOutputStream;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      
      /**
       * @author: 86199
       * @date: 2023/5/16 14:57
       * @description: 工具类
       */
      public class StreamUtils {
          public static byte[] streamToByteArray(InputStream is) throws Exception {
              // 创建输出流对象
              ByteArrayOutputStream bos = new ByteArrayOutputStream();
              // 字节数组
              byte[] b = new byte[1024];
              int len;
              while ((len = is.read(b)) != -1) {
                  // 循环读取
                  // 把读取到的数据,写入 bos
                  bos.write(b, 0, len);
              }
              byte[] array = bos.toByteArray();
              bos.close();
              return array;
          }
      
          public static String streamToString(InputStream is) throws Exception {
              BufferedReader reader = new BufferedReader(new InputStreamReader(is));
              StringBuilder builder = new StringBuilder();
              String line;
              while ((line = reader.readLine()) != null) {
                  builder.append(line + "\r\n");
              }
              return builder.toString();
          }
      }
      
    • 服务端

      package com.hspedu.upload;
      
      import java.io.*;
      import java.net.ServerSocket;
      import java.net.Socket;
      
      /**
       * @author: 86199
       * @date: 2023/5/15 16:24
       * @description:
       */
      public class TCPFileUploadServer {
          public static void main(String[] args) throws Exception {
              ServerSocket serverSocket = new ServerSocket(8888);
              System.out.println("服务端在8888等待连接......");
              Socket accept = serverSocket.accept();
      
              String filePath = "D:\\program\\javaProject\\Idea_Java_Project\\chapter21\\src\\copy.jpg";
      
              BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
              BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
      
              byte[] bytes = StreamUtils.streamToByteArray(bis);
      
              bos.write(bytes);
              bos.close();
      
              //向客户端回复“收到图片”
              BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));
              bufferedWriter.write("收到图片");
              bufferedWriter.flush();
              accept.shutdownOutput();
      
              //关闭流和socket
              bis.close();
              accept.close();
              serverSocket.close();
          }
      }
      
    • 客户端文章来源地址https://www.toymoban.com/news/detail-582346.html

      package com.hspedu.upload;
      
      import java.io.*;
      import java.net.InetAddress;
      import java.net.Socket;
      
      
      /**
       * @author: 86199
       * @date: 2023/5/15 16:24
       * @description:
       */
      public class TCPFileUploadClient {
          public static void main(String[] args) throws Exception {
      
              Socket socket = new Socket(InetAddress.getLocalHost(), 8888);
              String filePath = "e:\\qie.jpg";
      
              BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
              BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));
      
              byte[] bytes = StreamUtils.streamToByteArray(bis);
              bos.write(bytes);
              bos.flush();
              //没有手动调用flush方法,也没有调用close方法关闭流,数据复制失败,
              //因为数据还在内部缓冲区,并没有输出 (因为内部缓冲区没有被放满,不调用flush方法,不会输出)
              bis.close();
              socket.shutdownOutput();
      
              //接收消息
              InputStream inputStream = socket.getInputStream();
              String s = StreamUtils.streamToString(inputStream);
              System.out.println(s);
      
              //关闭流和socket
              inputStream.close();
              bos.close();
              socket.close();
          }
      }
      

到了这里,关于网络编程 p4 TCP编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《TCP/IP网络编程》阅读笔记--基于UDP的服务器端/客户端

    目录 1--TCP和UDP的主要区别 2--基于 UDP 的数据 I/O 函数 3--基于 UDP 的回声服务器端/客户端 4--UDP客户端Socket的地址分配 5--UDP存在数据边界 6--UDP已连接与未连接的设置 ① TCP 提供的是可靠数据传输服务,而 UDP 提供的是不可靠数据传输服务; ② UDP 在结构上比 TCP 更简洁,其不会

    2024年02月09日
    浏览(50)
  • 《TCP/IP网络编程》阅读笔记--基于Windows实现Hello Word服务器端和客户端

    目录 1--Hello Word服务器端 2--客户端 3--编译运行 3-1--编译服务器端 3-2--编译客户端 3-3--运行 运行结果:

    2024年02月10日
    浏览(44)
  • 网络编程:编写一个TCP客户端与服务端

    用的系统是Ubuntu。 socket用来创建套接字。这个函数服务端与客户端都要使用。 第一个参数用来制定地址族规范,比如 AF_INET(PF_INET) 表示IPv4地址, AF_INET6(PF_INET6) 表示IPv6地址。 第二个参数用来制定套接字的类型规范,如 SOCK_STREAM 表示面向连接的套接字, SOCK_DGRAM 表示面

    2024年02月01日
    浏览(36)
  • ESP32网络编程-TCP客户端数据传输

    本文将详细介绍在Arduino开发环境中,实现一个ESP32 TCP客户端,从而达到与TCP服务器数据交换的目标。 Internet 协议(IP)是 Internet 的地址系统,具有将数据包从源设备传递到目标设备的核心功能。IP 是建立网络连接的主要方式,奠定了 Internet 的基础。IP 不负责数据包排序或错

    2024年02月03日
    浏览(30)
  • 网络编程——socket服务端和客户端(TCP)

    所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通

    2024年02月07日
    浏览(34)
  • 【网络编程】实现UDP/TCP客户端、服务器

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、UDP 1、Linux客户端、服务器 1.1udpServer.hpp 1.2udpServer.cc 1.3udpClient.hpp 1.4udpClient.cc 1.5onlineUser.hpp 2、Windows客户端 二、T

    2024年02月06日
    浏览(45)
  • 【Linux | 网络编程】TCP的服务端(守护进程) + 客户端

    上一节,我们用了udp写了一个服务端和客户端之间通信的代码,只要函数了解认识到位,上手编写是很容易的。 本章我们开始编写tcp的服务端和客户端之前通信的代码,要认识一批新的接口,并将我们之前学习的系统知识加进来,做到融会贯通… 代码详情:👉 Gitee 对于TC

    2024年01月16日
    浏览(32)
  • Python网络编程实战:构建TCP服务器与客户端

    Python网络编程实战:构建TCP服务器与客户端 在信息化时代,网络编程是软件开发中不可或缺的一部分。Python作为一种功能强大的编程语言,提供了丰富的网络编程库和工具,使得开发者能够轻松构建各种网络应用。本文将详细介绍如何在Python中进行网络编程,特别是如何使用

    2024年04月15日
    浏览(34)
  • C#实现简单TCP服务器和客户端网络编程

    在C#中进行网络编程涉及许多类和命名空间,用于创建和管理网络连接、传输数据等。下面是一些主要涉及的类和命名空间: System.Net 命名空间: 这个命名空间提供了大部分网络编程所需的类,包括: IPAddress :用于表示IP地址。 IPEndPoint :表示IP地址和端口号的组合。 Socke

    2024年02月11日
    浏览(49)
  • 【Java】网络编程与Socket套接字、UDP编程和TCP编程实现客户端和服务端通信

    为什么需要网络编程? 现在网络普及程序越来越高,网络上保存着我们日常生活中需要的各种资源,使用程序通过网络来获取这些资源的过程就需要网络编程来实现。 什么是网络编程? 网络编程,指网络上的主机,通过不同的进程以程序的方式实现网络通信(网络数据传输)

    2024年02月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包