当前位置: 首页 > news >正文

Java基础-TCP通信(多发多收和一发一收)

目录

案例要求:

实现思路:

代码:

User:客户端

Client:服务端

总结:


案例要求:

实现TCP通信的多发多收和一发一收,多发多收去掉各自的while循环就是一发一收,本文只模拟一发一收

实现思路:

客户端(User)通过Socket连接服务端(Client)的8888端口,用户输入消息后通过DataOutputStream发送,输入"exit"退出。服务端通过ServerSocket监听端口,接收消息后显示内容和客户端IP及端口信息。该实现移除了多发多收中的循环结构,简化为一对一通信模式,可作为TCP通信的基础框架。

代码:

User:客户端

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.*;
import java.util.Scanner;public class User {public static void main(String[] args) throws Exception {Socket socket = new Socket("127.0.0.1", 8888);OutputStream out = socket.getOutputStream();DataOutputStream dos = new DataOutputStream(out);Scanner sc = new Scanner(System.in);while (true) {String msg= sc.nextLine();if(msg.equals("exit")){dos.close();socket.close();break;}dos.writeUTF(msg);}}
}

Client:服务端

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;public class Client {public static void main(String[] args) throws  Exception{ServerSocket serverSocket = new ServerSocket(8888);Socket socket = serverSocket.accept();InputStream in = socket.getInputStream() ;DataInputStream dis = new DataInputStream(in);while (true) {String msg=dis.readUTF();System.out.println("收到用户端的消息:"+msg);String ip=socket.getInetAddress().getHostAddress();String port=socket.getPort()+"";System.out.println("ip:"+ip+" port:"+port);}}
}


总结:

本文实现了一发一收的TCP通信模型。客户端(User)通过Socket连接服务端(Client)的8888端口,用户输入消息后通过DataOutputStream发送,输入"exit"退出。服务端通过ServerSocket监听端口,接收消息后显示内容和客户端IP及端口信息。该实现移除了多发多收中的循环结构,简化为一对一通信模式,可作为TCP通信的基础框架。

http://www.lryc.cn/news/615269.html

相关文章:

  • webrtc弱网-BandwidthQualityScaler 源码分析与算法原理
  • 基于 RAUC 的 Jetson OTA 升级全攻略
  • RAGFoundry:面向检索增强生成的模块化增强框架
  • 功能测试中常见的面试题-一
  • DataDex 多样化 JSON 服务——使用教程
  • linux php版本降级,dnf版本控制
  • 在CoT中为什么仅用方程式提示不够
  • drippingblues靶机教程
  • Spring Boot自定义Starter:从原理到实战全解析
  • AutoML 的下半场——从“模型选择”到“端到端业务闭环”
  • [Oracle] SUBSTR()函数
  • 【代码篇】关于PartiallyPassword插件_实现文章加密
  • 【工作流引擎】Flowable 和 Activiti
  • Web前端之 ECMAScript6
  • [激光原理与应用-204]:光学器件 - LD激光二极管工作原理以及使用方法
  • 人类语义认知统一模型:融合脑科学与AI的突破
  • VisionPro常用标定方式
  • 数据结构—二叉树及gdb的应用
  • Linux网络编程:TCP的远程多线程命令执行
  • 202506 电子学会青少年等级考试机器人四级器人理论真题
  • Baumer高防护相机如何通过YoloV8深度学习模型实现火星陨石坑的检测识别(C#代码UI界面版)
  • 开发手札:UnrealEngine和Unity3d坐标系问题
  • CSS 选择器进阶:用更聪明的方式定位元素
  • kubectl get node k8s-node01 -o yaml | grep taint -B 5 -A 5
  • 开源智能手机安全相机推荐:Snap Safe
  • go数据处理之textproto.Pipeline
  • CamX-骁龙相机修改
  • python学智能算法(三十六)|SVM-拉格朗日函数求解(中)-软边界
  • 【Mac】MLX:Lora微调工作流
  • 学习Java的Day28