C#中的模拟服务器与客户端建立连接
创建一个控制台项目,命名为Server,模拟服务器端。在同一个解决方案下,添加新项目,命名为Client,模拟客户端。在服务器端与客户端之间建立TCP连接,并在客户端发送消息,在服务器端输出。
Server项目具体要求:
1.在Server项目中,用本机端点建立TcpListener对象,进行监听。
2.在客户端发出连接请求后,接收请求,获取远程连接客户端对象。
3.接收客户端发送过来的正方形边长,并显示。
4.计算正方形的面积,回复运算结果并显示。
5.最后关闭该通信。
Client项目具体要求:
1.建立TcpClient对象。
2.与服务器端建立连接。
3.连接成功后,向服务端发送正方形的边长,并显示。
4.接收服务器端发送的运算结果并显示。
5.最后关闭该通信。
实现效果如下:
private static void Main(string[] args)
{
TcpClient tc = new TcpClient(); //1 连接服务器
tc.Connect("127.0.0.1", 5001);
if (tc.Connected) //判断服务器是否连接成功
Console.WriteLine("服务器连接成功");
Console.Write("请输入第一个数字:");
// string msg = Console.ReadLine(); //4通过网络把输入的文本传给服务器
NetworkStream ns = tc.GetStream();
StreamWriter sw = new StreamWriter(ns);//发送给服务器第一个数据
sw.WriteLine(Console.ReadLine());
sw.Flush();
Console.WriteLine("请输入运算符'+''-''*'");
StreamWriter sw2 = new StreamWriter(ns);//发送给服务器第二个数据
sw2.WriteLine(Console.ReadLine());
sw2.Flush();
Console.WriteLine("请输入第二个数");
StreamWriter sw3 = new StreamWriter(ns);//发送给服务器第三个数据
sw3.WriteLine(Console.ReadLine());
sw3.Flush();
StreamReader sr = new StreamReader(ns); //接受服务区发来的第一个数据 //6
Console.WriteLine("服务器说:" + sr.ReadLine());
sr.Close();
//sr2.Close();
//sr3.Close();
sw.Close();
sw2.Close();
sw3.Close();
ns.Close();
tc.Close();
Console.ReadKey();
}
private static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("127.0.0.1");//2 接受客户端连接
TcpListener t1 = new TcpListener(ip, 5001);
t1.Start();
Console.WriteLine("服务器启动,等待连接。。。");
TcpClient tc = t1.AcceptTcpClient(); //3 显示客户端连接情况
if (tc != null)
Console.WriteLine("客户端连接成功,等待客户端输入");
NetworkStream ns = tc.GetStream(); //这是个管道 //5
StreamReader sr = new StreamReader(ns);//接受客户端发的第一个数据
string msg = sr.ReadLine();
Console.WriteLine("客户端说:" + msg);
StreamReader sr2 = new StreamReader(ns);//接收客户端发的第二个数据
string msg2 = sr2.ReadLine();//22222
Console.WriteLine("客户端说:" + msg2);
StreamReader sr3 = new StreamReader(ns);//接受客户端发的第三个数据
string msg3 = sr3.ReadLine();//22222
Console.WriteLine("客户端说:" + msg3);
Console.Write("请回复"); //回复客户端的第一个数据 //7
StreamWriter sw = new StreamWriter(ns);
if (msg2 == "+")
{
sw.WriteLine("计算结果为{0}", Convert.ToInt32(msg) + Convert.ToInt32(msg3));
sw.Flush();
}
else if (msg2 == "-")
{
sw.WriteLine("计算结果为{0}", Convert.ToInt32(msg) - Convert.ToInt32(msg3));
sw.Flush();
}
else if (msg2 == "*")
{
sw.WriteLine("计算结果为{0}", Convert.ToInt32(msg) * Convert.ToInt32(msg3));
sw.Flush();
}
else if (msg2 == "/")
{
try
{
sw.WriteLine("计算结果为{0}", Convert.ToInt32(msg) / Convert.ToInt32(msg3));
sw.Flush();
}
catch (Exception)
{
sw.WriteLine("输入数据有错误,请检查后重新输入");
sw.Flush();
}
}
sw.Close();
sr.Close();
sr2.Close();
ns.Close();
tc.Close();
t1.Stop();
Console.ReadKey();
}
相关文章:
C#中的模拟服务器与客户端建立连接
创建一个控制台项目,命名为Server,模拟服务器端。在同一个解决方案下,添加新项目,命名为Client,模拟客户端。在服务器端与客户端之间建立TCP连接,并在客户端发送消息,在服务器端输出。 Server项…...
【深度学习】利用Java DL4J 构建和训练医疗影像分析模型
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s…...
application.yml 和 bootstrap.yml
在 Spring Boot 中,application.yml 和 bootstrap.yml 都是用来配置应用程序的属性文件,通常用于环境配置、服务配置等。但是,它们有一些不同的用途和加载顺序。以下是它们之间的主要区别: 1. application.yml: 主要…...
使用uniapp开发小程序场景:在百度地图上调用接口返回的设备相关信息并展示
首先在百度地图开发者平台注册微信小程序开发密钥下载百度地图SDK-bmap-wx.min.js,下载地址在项目入口index.html页面进行引入页面中进行调用,代码示例如下<map id"map" longitude"108.95" latitude"34.34" scale"3" :m…...
ubuntu22.04 使用可以用的镜像源获取你要的镜像
默认的是不行的 不管pull啥镜像 仍然会出现这个错误 Error response form daemon:Get "https://registry-1.docker.io/v2": net/http: request canceled while waiting for connection (Client.Timeout exceeded while await) 操作方法是 如果在目录没有/etc/docker…...
Flume——sink连接hdfs的参数配置(属性参数+时间参数)
这可不是目录 配置文件官网说明属性参数时间参数 配置文件官网说明 可以参考官网的说明 属性参数 属性名称默认值说明channel-type-组件类型名称,必须是hdfshdfs.path-HDFS路径,例如:hdfs://mycluster/flume/mydatahdfs.filePrefixFlumeDa…...
python+docker实现分布式存储的demo
test.py代码 #test.py from flask import Flask, request, jsonify import requests import sys import threadingapp Flask(__name__)# 存储数据 data_store {}# 节点列表,通过环境变量传入 nodes [] current_node Noneapp.route(/set, methods[POST]) def …...
go-blueprint create exit status 1
1. 异常信息 2024/12/06 10:59:19 Could not initialize go.mod in new project exit status 1 2024/12/06 10:59:19 Problem creating files for project. exit status 1 Error: exit status 12. 排查思路 手动进行go mod init查看手动的报错解决报错 3. 解决问题 发现是GO11…...
如何更改Git用户名 - 本地与全局设置指南
在开发过程中,当使用Git作为版本控制系统时,可能会遇到需要更改用户名的情况,适时更新Git配置是保持项目管理效率的重要环节。更改Git用户名可以帮助确保您的提交反映了当前的用户身份,这对于项目的协作和历史记录跟踪至关重要。 …...
Node.js JWT认证教程
Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案,在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …...
【青牛科技】应用于音频信号处理系统的D258 是由两个独立的高增益运算放大器组成
概述: D258是由两个独立的高增益运算放大器组成。可以是单电源工作,也可以是双电源工作,电源的电流消耗与电源电压大小无关。应用范围包括变频放大器、DC增益部件和所有常规运算放大电路。 主要特点: ● 可单电源或双电源 工作 ● 在一个封…...
HTML Input 文件上传功能全解析:从基础到优化
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
小程序 —— Day1
组件 — view和scroll-view view 类似于HTML中的div,是一个块级元素 案例:通过view组件实现页面的基础布局 scroll-view 可滚动的视图区域,用来实现滚动列表效果 案例:实现纵向滚动效果 scroll-x属性:允许横向滚动…...
4.5 TCP 报文段的首部格式
欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 前言1 TCP 报文段的基本结构2 固定部分2.1 源端口与目的端口2.2 序号2.3 确认号2.4 数据偏移2.5 保留字段2.6 控制位2.7 窗口2.8 检验和2.9 紧急指针 3 可变部分3.1 选项3.2 填…...
SQL 获取今天的当月开始结束范围:
使用 GETDATE() 结合 DATEADD() 和 DATEDIFF() 函数来获取当前月的开始和结束时间范围。以下是实现当前月时间范围查询的 SQL: FDATE > DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) FDATE < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) 1, 0) …...
Qt复习学习
https://www.bilibili.com/video/BV1Jp4y167R9/?spm_id_from333.999.0.0&vd_sourceb3723521e243814388688d813c9d475f https://subingwen.cn/qt/qt-primer/#1-4-Qt%E6%A1%88%E4%BE%8B https://subingwen.cn/qt/ https://download.qt.io/archive/qt/1.1Qt的特点 1.2QT中的…...
Leetcode经典题5--轮转数组
题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入输出示例 : 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…...
C++的一些经典算法
以下是C的一些经典算法: 一、排序算法 冒泡排序(Bubble Sort) 原理: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...
Windows环境中Python脚本开机自启动及其监控自启动
1 开机自启动 Windows 10/Windows Server 201X具有一个名为“启动”的已知文件夹,系统每次启动开始自动运行应用程序、快捷方式和脚本时都会检查该文件夹,而无需额外配置。 要在Windows启动时运行脚本,先使用WindowsR快捷键打开“运行”对话…...
XML 语言随笔
XML的含义 XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。XML与HTML(HyperText Markup Language,超文本标记语言)类似,但XML的设计目的是描述数据&…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
