java 中模拟TCP传输的客户端和服务端实例详解

发布时间 - 2026-01-11 00:23:59    点击率:

一、创建TCP传输的客户端

1、建立TCP客户端的Socket服务,使用的是Socket对象,建议该对象一创建就明确目的地,即要连接的主机;

2、如果连接建立成功,说明数据传输通道已建立,该通道就是Socket流,是底层建立好的,既然是流,说着这里既有输入流,又有输出流,想要输入流或者输出流对象,可以通过Socket来获取,可以通过getOutputStream()和getInputStream()来获取;

3、使用输出流,将数据写出;

4、关闭Socket服务。

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
  public static void main(String[] args) throws IOException {

    // 1、创建客户端的Socket服务
    Socket socket = new Socket("192.168.1.100", 10002);

    // 2、获取Socket流中输入流
    OutputStream out = socket.getOutputStream();

    // 3、使用输出流将指定的数据写出去
    out.write("TCP is coming !".getBytes());

    // 4、关闭Socket服务
    socket.close();
  }
}

二、创建TCP传输的服务端

1、建立TCP服务端的的Socket服务,通过ServerSocket对象;

2、服务端必须对外提供一个端口,否则客户端无法连接;

3、获取连接过来的客户端对象;

4、通过客户端对象来获取Socket流,读取客户端发来的数据;

5、关闭资源,关客户端,关服务端。

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
  public static void main(String[] args) throws IOException {

    // 1、创建客户端对象
    ServerSocket ss = new ServerSocket(10002);

    // 2、获取连接过来的客户端对象
    Socket s = ss.accept();

    String ip = s.getInetAddress().getHostAddress();

    // 3、通过Socket对象获取输入流,读取客户端发来的数据
    InputStream in = s.getInputStream();

    byte[] buf = new byte[1024];

    int len = in.read(buf);
    String text = new String(buf, 0, len);
    System.out.println(ip + ":" + text);

  // 4、关闭资源
    s.close();
    ss.close();
  }
}

三、优化TCP传输的客户端和服务端

在本部分,我们对前两部分的内容进行优化,实现TCP传输模式下的客户端和服务端的交互功能。

/**
*优化TCP传输的客户端
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ClientUpdate {
  public static void main(String[] args) throws IOException {

    Socket socket = new Socket("192.168.1.100", 10002);

    OutputStream out = socket.getOutputStream();

    out.write("tcp!".getBytes());

    // 读取服务端返回的数据,使用Socket读取流
    InputStream in = socket.getInputStream();
    byte[] buf = new byte[1024];

    int len = in.read(buf);

    String text = new String(buf, 0, len);

    System.out.println(text);

    socket.close();
  }
}

/**
*优化TCP传输的服务端
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerUpdate {
  public static void main(String[] args) throws IOException {

    // 1、创建服务端对象
    ServerSocket ss = new ServerSocket(10002);

    // 2、获取连接过来的客户端对象
    Socket s = ss.accept(); //accept方式为阻塞式方法

    String ip = s.getInetAddress().getHostAddress();

    // 3、通过Socket对象获取输入流,要读取客户端发来的数据
    InputStream in = s.getInputStream();

    byte[] buf = new byte[1024];

    int len = in.read(buf);
    String text = new String(buf, 0, len);
    System.out.println(ip + ":" + text);

    // 使用客户端的Socket对象的输出流给客户端返回数据
    OutputStream out = s.getOutputStream();
    out.write("收到".getBytes());

    s.close();
    ss.close();
  }
}

四、创建英文大写转换服务器

应用TCP(Transmission Control Protocol,传输控制协议)的相关性质,创建一个基于TCP传输下的英文大写转换服务器,要求:客户端输入字母数据,发送给服务端;服务端收到数据后显示在控制台,并将该数据转成大写字母返回给客户端;直到客户端输入“over”为止,转换结束。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TransClient {
  public static void main(String[] args) throws IOException {
    /**
     * 思路:创建客户端
     * 1、创建Socket客户端对象
     * 2、获取键盘录入的数据
     * 3、将录入的信息发送给Socket输出流
     * 4、读取服务端的数据并返回的大写数据
     */

    // 1、创建Socket客户端对象
    Socket s = new Socket("192.168.1.100", 10004);

    // 2、获取键盘录入
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

    // 3、Socket输出流
    PrintWriter out = new PrintWriter(s.getOutputStream(), true);

    // 4、Socket输入流,读取服务端的数据并返回的大写数据
    BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

    String line = null;

    while ((line = bufr.readLine()) != null) {

      if ("over".equals(line))
        break;
      out.println(line);

      // 读取服务端返回的一行大写数据
      String upperStr = bufIn.readLine();
      System.out.println(upperStr);
    }
    s.close();
  }
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class TransServer {
  public static void main(String[] args) throws IOException {
    /**
     * 思路:创建服务端
     * 1、创建SeverSocket客户端对象
     * 2、获取Socket流
     * 3、通过Socket, 读取客户端发过来的需要转换的数据
     * 4、显示在控制台上
     * 5、将数据转换成大写返回给客户端
     */

    // 1、创建SeverSocket对象
    ServerSocket ss = new ServerSocket(10004);

    // 2、获取Socket对象
    Socket s = ss.accept();

    // 获取IP地址
    String ip = s.getInetAddress().getHostAddress();
    System.out.println(ip + "......connected");

    // 3、获取Socket读取流,并装饰
    BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));

    // 4、获取Socket的输出流,并装饰
    PrintWriter out = new PrintWriter(s.getOutputStream(), true);

    String line = null;
    while ((line = bufIn.readLine()) != null) {
      System.out.println(line);
      out.println(line.toUpperCase());
    }

    s.close();
    ss.close();
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 中模拟TCP传输的客户端和服务端  # TCP传输的客户端和服务端  # 实现了基于TCP的Java Socket编程实例代码  # Java实现Socket的TCP传输实例  # java实现一个简单TCPSocket聊天室功能分享  # Java基于Tcp协议的socket编程实例  # 基于java TCP网络通信的实例详解  # Java基于TCP方式的二进制文件传输  # Java Socket编程实例(四)- NIO TCP实践  # Java Socket编程实例(三)- TCP服务端线程池  # Java使用TCP实现数据传输实例详解  # Java网络编程之TCP程序设计  # 客户端  # 服务端  # 可以通过  # 英文  # 的是  # 发送给  # 说着  # 又有  # 希望能  # 谢谢大家  # 提供一个  # 转换成  # 将该  # 两部分  # 创建一个  # 转成  # 台上  # 模式下  # args  # String 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  Laravel如何使用Telescope进行调试?(安装和使用教程)  Python结构化数据采集_字段抽取解析【教程】  制作电商网页,电商供应链怎么做?  如何在IIS管理器中快速创建并配置网站?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  如何在阿里云高效完成企业建站全流程?  如何快速辨别茅台真假?关键步骤解析  如何自定义建站之星网站的导航菜单样式?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  网站制作报价单模板图片,小松挖机官方网站报价?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  *服务器网站为何频现安全漏洞?  Linux系统命令中tree命令详解  如何用已有域名快速搭建网站?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  ,怎么在广州志愿者网站注册?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  如何快速打造个性化非模板自助建站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  怎样使用JSON进行数据交换_它有什么限制  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Mybatis 中的insertOrUpdate操作  Android自定义控件实现温度旋转按钮效果  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  文字头像制作网站推荐软件,醒图能自动配文字吗?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Java遍历集合的三种方式  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  如何在阿里云ECS服务器部署织梦CMS网站?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  javascript日期怎么处理_如何格式化输出  如何制作一个表白网站视频,关于勇敢表白的小标题?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel如何使用模型观察者?(Observer代码示例)  非常酷的网站设计制作软件,酷培ai教育官方网站?  详解MySQL数据库的安装与密码配置  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  如何快速搭建虚拟主机网站?新手必看指南