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

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页面进行引入页面中进行调用&#xff0c;代码示例如下<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-组件类型名称&#xff0c;必须是hdfshdfs.path-HDFS路径&#xff0c;例如&#xff1a;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 {}# 节点列表&#xff0c;通过环境变量传入 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用户名 - 本地与全局设置指南

在开发过程中&#xff0c;当使用Git作为版本控制系统时&#xff0c;可能会遇到需要更改用户名的情况&#xff0c;适时更新Git配置是保持项目管理效率的重要环节。更改Git用户名可以帮助确保您的提交反映了当前的用户身份&#xff0c;这对于项目的协作和历史记录跟踪至关重要。 …...

Node.js JWT认证教程

Node.js JWT认证教程 1. 项目介绍 JSON Web Token (JWT) 是一种安全的跨域身份验证解决方案&#xff0c;在现代Web应用中广泛使用。本教程将详细讲解如何在Node.js中实现JWT认证。 2. 项目准备 2.1 初始化项目 # 创建项目目录 mkdir nodejs-jwt-auth cd nodejs-jwt-auth# …...

【青牛科技】应用于音频信号处理系统的D258 是由两个独立的高增益运算放大器组成

概述&#xff1a; D258是由两个独立的高增益运算放大器组成。可以是单电源工作&#xff0c;也可以是双电源工作,电源的电流消耗与电源电压大小无关。应用范围包括变频放大器、DC增益部件和所有常规运算放大电路。 主要特点&#xff1a; ● 可单电源或双电源 工作 ● 在一个封…...

HTML Input 文件上传功能全解析:从基础到优化

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

小程序 —— Day1

组件 — view和scroll-view view 类似于HTML中的div&#xff0c;是一个块级元素 案例&#xff1a;通过view组件实现页面的基础布局 scroll-view 可滚动的视图区域&#xff0c;用来实现滚动列表效果 案例&#xff1a;实现纵向滚动效果 scroll-x属性&#xff1a;允许横向滚动…...

4.5 TCP 报文段的首部格式

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言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&#xff1a; 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&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 输入输出示例 &#xff1a; 输入: 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的一些经典算法&#xff1a; 一、排序算法 冒泡排序&#xff08;Bubble Sort&#xff09; 原理&#xff1a; 它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…...

Windows环境中Python脚本开机自启动及其监控自启动

1 开机自启动 Windows 10/Windows Server 201X具有一个名为“启动”的已知文件夹&#xff0c;系统每次启动开始自动运行应用程序、快捷方式和脚本时都会检查该文件夹&#xff0c;而无需额外配置。 要在Windows启动时运行脚本&#xff0c;先使用WindowsR快捷键打开“运行”对话…...

XML 语言随笔

XML的含义 XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言。XML与HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;类似&#xff0c;但XML的设计目的是描述数据&…...

GAMES201实战:5分钟搞懂快速多极展开(FMM)在静电模拟中的应用

GAMES201实战&#xff1a;5分钟搞懂快速多极展开(FMM)在静电模拟中的应用 当你在游戏引擎中设计一个带电粒子系统时&#xff0c;是否遇到过这样的困境&#xff1a;随着粒子数量增加&#xff0c;计算速度呈指数级下降&#xff1f;传统N体问题计算需要处理每个粒子间的相互作用&a…...

别光看公式了!用Multisim 14.0手把手仿真这8个经典运放电路(附工程文件)

别光看公式了&#xff01;用Multisim 14.0手把手仿真这8个经典运放电路&#xff08;附工程文件&#xff09; 在电子工程的学习过程中&#xff0c;运算放大器&#xff08;Op-Amp&#xff09;无疑是一个让人又爱又恨的存在。爱的是它强大的功能和广泛的应用&#xff0c;恨的是那些…...

FlowState Lab新手避坑指南:快速上手时间序列预测的5个技巧

FlowState Lab新手避坑指南&#xff1a;快速上手时间序列预测的5个技巧 1. 环境准备与快速部署 1.1 系统要求与安装步骤 FlowState Lab作为基于IBM Granite架构的时间序列分析工具&#xff0c;对运行环境有以下要求&#xff1a; 操作系统&#xff1a;Linux (推荐Ubuntu 20.…...

Java医疗系统通过等保三级测评前,这8个高危漏洞必须在72小时内闭环(附OWASP Top 10映射清单)

第一章&#xff1a;医疗Java系统等保三级合规性基线与高危漏洞判定标准在医疗行业&#xff0c;Java系统承载着电子病历、HIS、LIS、PACS等核心业务&#xff0c;其安全合规性直接关系患者隐私与公共健康。等保三级要求系统具备完善的身份鉴别、访问控制、安全审计、入侵防范及可…...

SmallThinker-3B部署实录:在16GB内存笔记本上稳定运行长链推理服务

SmallThinker-3B部署实录&#xff1a;在16GB内存笔记本上稳定运行长链推理服务 1. 环境准备与快速部署 想要在普通笔记本上运行大模型推理服务&#xff1f;SmallThinker-3B-Preview让你用16GB内存就能实现这个目标。这个模型基于Qwen2.5-3b-Instruct微调而来&#xff0c;专门…...

ANSYS接触分析实战:从法兰连接案例看MPC绑定与标准接触设置技巧

ANSYS接触分析实战&#xff1a;法兰连接中的MPC绑定与标准接触配置全解析 在机械工程领域&#xff0c;法兰连接作为管道系统中最常见的连接方式之一&#xff0c;其可靠性直接影响整个系统的安全运行。传统设计方法往往依赖经验公式和安全系数&#xff0c;难以准确预测复杂工况下…...

提示工程架构师用Agentic AI,为智能城市提升品质生活

提示工程架构师&#xff1a;借助Agentic AI提升智慧城市品质生活 一、引言 (Introduction) 钩子 (The Hook) 想象一下&#xff0c;你生活在这样一个城市&#xff1a;每天清晨&#xff0c;你的智能设备会根据当天的天气、你的日程安排&#xff0c;精准推荐最适宜的衣物和出行方式…...

自动驾驶中的路径规划实战:手把手教你用Python复现RRT与RRT*算法(含动态演示)

自动驾驶路径规划实战&#xff1a;Python实现RRT与RRT*算法全解析 从理论到实践的路径规划探索 在自动驾驶技术快速发展的今天&#xff0c;路径规划作为核心算法之一&#xff0c;直接决定了车辆能否安全高效地完成行驶任务。想象一下&#xff0c;当你驾驶车辆进入一个复杂的停车…...

ESP8266轻量Web服务器库myWebServerESP深度解析

1. myWebServerESP&#xff1a;面向ESP8266/NODEMCU的轻量级嵌入式Web服务器库深度解析1.1 项目定位与工程价值myWebServerESP是一个专为 ESP8266 系列芯片&#xff08;含 NodeMCU 开发板&#xff09;设计的轻量级、可配置 Web 服务框架&#xff0c;运行于 Arduino IDE 生态下。…...

Windows屏保设置失效?解锁注册表权限的终极指南

1. 为什么你的Windows屏保设置突然失效了&#xff1f; 最近有没有遇到过这种情况&#xff1a;明明想设置个屏保保护隐私&#xff0c;却发现所有选项都变成灰色不可点击&#xff1f;这个问题我帮不少朋友解决过&#xff0c;其实90%的情况都是注册表权限在作怪。Windows系统有个特…...