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

跟我一起学“仓颉”编程语言-TCP协议网络编程

一、TcpSocket和TcpServerSocket的基本用法

服务端项目

package Study // 导包 import std.net.* main () { try ( // 服务端 server = TcpServerSocket(bindAt: 9999) ) { // 绑定端口 server.bind() println("服务端已启动") // 阻塞等待客户端的连接 try (client = server.accept()) { println("服务端${client.localAddress}已连接客户端${client.remoteAddress}") // 接收客户端发送的数据 let buffer = Array<Byte>(1024, repeat: 0) var len = 0 // 只要数据没有读完,就一直读 while (true) { len = client.read(buffer) if (len == 0) { break } let data = String.fromUtf8(buffer[0..len]) println("数据: ${data}") } } } }

客户端项目

package Sender // 导包 import std.net.* import std.console.* main () { try ( // 客户端 client = TcpSocket("127.0.0.1", 9999) ) { // 连接到服务端 client.connect() println("客户端${client.localAddress}已启动") println("连接到${client.remoteAddress}服务端") let data = "你好, 我是钝子生" println("发送数据: ${data}") client.write(data.toArray()) println("发送完毕") } }

服务端也可以向客户端发送数据

服务端项目

package Study // 导包 import std.net.* main () { try ( // 服务端 server = TcpServerSocket(bindAt: 9999) ) { // 绑定端口 server.bind() println("服务端已启动") // 阻塞等待客户端的连接 try (client = server.accept()) { println("服务端${client.localAddress}已连接客户端${client.remoteAddress}") let data = "你好, 我是服务端" println("发送数据: ${data}") client.write(data.toArray()) println("发送完毕") } } }

客户端项目

package Sender // 导包 import std.net.* import std.console.* main () { try ( // 客户端 client = TcpSocket("127.0.0.1", 9999) ) { // 连接到服务端 client.connect() println("客户端${client.localAddress}已启动") println("连接到${client.remoteAddress}服务端") // 接收客户端发送的数据 let buffer = Array<Byte>(1024, repeat: 0) var len = 0 // 只要数据没有读完,就一直读 while (true) { len = client.read(buffer) if (len == 0) { break } let data = String.fromUtf8(buffer[0..len]) println("数据: ${data}") } } }

二、小结

本章为大家详细的介绍了仓颉编程语言中TCP协议网络编程的内容,下一章,为大家带来网络编程练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

http://www.jsqmd.com/news/972385/

相关文章:

  • 终极指南:从Nano Colors快速迁移到Picocolors的5个简单步骤
  • 如何用abcjs在5分钟内将文本乐谱变成专业五线谱
  • OptiScaler终极指南:让任何显卡都能享受DLSS级画质提升的免费神器
  • 终极指南:如何一键重置Cursor试用限制,告别“试用账户过多“错误
  • Sqribble:面向工程化的文档操作系统解析
  • 避坑指南:Waymo数据集可视化工具Mayavi/Open3D环境配置与点云渲染实战
  • Python中文词云开发全流程:从清洗分词到业务加权可视化
  • 5步解锁旧Mac新生命:OpenCore Legacy Patcher终极安装指南
  • Mac Mouse Fix:如何让普通鼠标在macOS上超越苹果触控板体验
  • WiVRn与OpenXR标准:如何确保跨平台兼容性的完整指南
  • 跟我一起学“仓颉”编程语言-网络编程练习题
  • 全能旗舰版 DApp 交易所系统部署与实操指南
  • Polygon Shredder技术解析:Three.js实现GPU粒子模拟的10个核心技巧
  • 三角洲行动护航系统源码部署与运营指南
  • SAP MM配置避坑指南:手把手教你设置BP与供应商编码自动同步(含Same Number选项详解)
  • 跟我一起学“仓颉”编程语言-反射和注解
  • 基于深度学习的 YOLOv11 目标检测与轴承缺陷质量控制轴承缺陷识别 (轴承数据集+模型+界面))
  • Webpack Bundle Size Analyzer核心原理:深入解析依赖树分析算法
  • 大模型应用后端底座设计与高并发支撑实践
  • FastANI终极指南:如何快速计算微生物基因组相似性
  • 终极指南:使用gh_mirrors/qq/qq-win-db-key修复与迁移损坏的QQ聊天记录数据库
  • 深入KEIL链接器:N32G45X串口打印背后,MicroLIB与标准C库的抉择与性能影响
  • 告别CAN报文丢失:深入解读S32K3的邮箱匹配算法与掩码优先级陷阱
  • 告别混乱!手把手教你为宝兰德BES中间件创建独立的“产品”与“应用”账号
  • GPT-4参数激活率真相:稀疏激活不是浪费,而是工程精算
  • 别只盯着CNN!手把手教你用Scikit-learn玩转Kaggle图像分类(Plant Seedlings保姆级教程)
  • 避坑指南:Xilinx FPGA里IDDR和ODDR原语的那些“坑”与最佳实践
  • 别再为HC-05配对发愁了!手把手教你用串口调试助手搞定主从蓝牙模块(附完整指令集)
  • SpringBoot自动配置翻车实录:手把手教你用@ConditionalOnMissingBean解决Bean冲突
  • 跟我一起学“仓颉”编程语言-跨语言互操作