使用c#实现TCP客户端与服务器端

1、实现客户端:

(1)、 首先创建一个TCP客户端类:
这个类将包含连接到服务器、发送数据和接收数据的方法。

using System;
using System.Net.Sockets;
using System.Text;public class TcpClientExample
{private TcpClient client;private NetworkStream stream;public TcpClientExample(string server, int port){client = new TcpClient(server, port);stream = client.GetStream();}//发送public void SendData(string data){byte[] dataToSend = Encoding.ASCII.GetBytes(data);stream.Write(dataToSend, 0, dataToSend.Length);Console.WriteLine($"Sent: {data}");}//接收public string ReceiveData(){byte[] buffer = new byte[256];int bytesRead = stream.Read(buffer, 0, buffer.Length);string responseData = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine($"Received: {responseData}");return responseData;}//关闭连接public void CloseConnection(){stream.Close();client.Close();}
}

(2、使用TCP客户端类:
实例化这个类并使用它的方法来与服务器进行通信。

class Program
{static void Main(string[] args){string server = "127.0.0.1"; // 服务器的IP地址int port = 5000;            // 服务器的端口号TcpClientExample tcpClient = new TcpClientExample(server, port);try{// 发送数据到服务器tcpClient.SendData("Hello, Server!");// 从服务器接收数据string response = tcpClient.ReceiveData();// 显示从服务器接收到的数据Console.WriteLine($"Server Response: {response}");}catch (Exception e){Console.WriteLine($"An error occurred: {e.Message}");}finally{// 关闭连接tcpClient.CloseConnection();}Console.WriteLine("Press any key to exit...");Console.ReadKey();}
}

2、实现服务器端:

(1)首先创建一个TCP服务器类:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;public class TcpServer
{private TcpListener listener;private bool isRunning;public TcpServer(int port){listener = new TcpListener(IPAddress.Any, port);isRunning = false;}public void Start(){listener.Start();isRunning = true;Console.WriteLine($"Server started on port {((IPEndPoint)listener.LocalEndpoint).Port}...");Task.Run(() => AcceptClientsAsync());}private async Task AcceptClientsAsync(){while (isRunning){try{TcpClient client = await listener.AcceptTcpClientAsync();Console.WriteLine("Client connected.");HandleClientAsync(client);}catch (ObjectDisposedException){// This exception may be thrown if the listener is stopped while accepting clients.break;}catch (Exception e){Console.WriteLine($"Error accepting client: {e.Message}");}}}private async Task HandleClientAsync(TcpClient client){NetworkStream stream = client.GetStream();byte[] buffer = new byte[1024];int bytesRead;try{while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) != 0){string dataReceived = Encoding.ASCII.GetString(buffer, 0, bytesRead);Console.WriteLine($"Received: {dataReceived}");// Send response to clientstring response = "Hello from server!";byte[] responseBytes = Encoding.ASCII.GetBytes(response);await stream.WriteAsync(responseBytes, 0, responseBytes.Length);}}catch (Exception e){Console.WriteLine($"Error handling client: {e.Message}");}finally{client.Close();Console.WriteLine("Client disconnected.");}}public void Stop(){isRunning = false;listener.Stop();Console.WriteLine("Server stopped.");}
}

(2)、实例化这个类并启动服务器:

class Program
{static void Main(string[] args){int port = 5000; // 服务器监听的端口号TcpServer server = new TcpServer(port);try{server.Start();Console.WriteLine("Press any key to stop the server...");Console.ReadKey();}finally{server.Stop();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471878.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本

作者:来自 Elastic Jonathan Simon 收集数据对于可观察性和安全性至关重要,而确保数据能够快速搜索且获得低延迟结果对于有效管理和保护应用程序和基础设施至关重要。但是,存储所有这些数据会产生持续的存储成本,这为节省成本创造…

基于ssh得网上预约挂号系统的设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用:指程序在执行时,调用方需要等待函数调用返回结果后,才能继续执行下一步操作,是一种阻塞式调用。 异步调用:指程序在执行时,调用方在调用函数后立…

Leecode刷题C语言之统计好节点的数目

执行结果:通过 执行用时和内存消耗如下: 题目:统计好节点的数目 现有一棵 无向 树,树中包含 n 个节点,按从 0 到 n - 1 标记。树的根节点是节点 0 。给你一个长度为 n - 1 的二维整数数组 edges,其中 edges[i] [ai,…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里,人们对 iOS 18 中一项新的未记录功能产生了极大关注,该功能会导致设备在一段时间不活动后重新启动。 这意味着,如果设备在一定时间不活…

mysql每日一题(上升的温度,date数据的计算)

日期之间的运算 日期类型的加法运算 data_add(now_data,interval 1 month) select date_add(now(), interval 1 day); -- 加1天 select date_add(now(), interval 1 hour); -- 加1小时 select date_add(now(), interval 1 minute); -- 加1分钟 select date_add(now(), inter…

windows NGIMX配置WebSocket反向代理

linux下 据说nginx是要有 stream的模块 Linux安装Nginx步骤之后续,带stream模块-CSDN博客 Nginx从1.3.13版本就开始支持WebSocket linux 下参考如下链接 配置 Nginx 反向代理 WebSocket - 哈喽哈喽111111 - 博客园 (cnblogs.com) SSL的配置参考 【Linux】采用…

蓝桥杯竞赛单片机组备赛【经验帖】

本人获奖情况说明 笔者本人曾参加过两次蓝桥杯电子赛,在第十二届蓝桥杯大赛单片机设计与开发组获得省级一等奖和国家级二等奖,在第十五届嵌入式设计开发组获得省级二等奖。如果跟着本帖的流程备赛,只要认真勤奋,拿个省二绝对没问…

《鸿蒙生态:开发者的机遇与挑战》

一、引言 在当今科技飞速发展的时代,操作系统作为连接硬件与软件的核心枢纽,其重要性不言而喻。鸿蒙系统的出现,为开发者带来了新的机遇与挑战。本文将从开发者的角度出发,阐述对鸿蒙生态的认知和了解,分析鸿蒙生态的…

入侵检测算法平台部署LiteAIServer视频智能分析平台行人入侵检测算法:科技守护安全的新篇章

在现代化城市快速发展的背景下,安全防范已成为城市管理与社会生活中不可或缺的一环。随着人工智能、大数据、物联网等技术的飞速发展,智能化安防系统正逐步改变着传统的安全防护模式,特别是在行人入侵检测领域,视频智能分析平台Li…

【Linux】Linux 权限的理解

首先我们先介绍Linux中基本的用户认识: Linux下有两种用户:超级用户(root)和普通用户 超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限(权限较低)的事情。超级用户的…

给阿里云OSS绑定域名并启用SSL

为什么要这么做? 问题描述: 当用户通过 OSS 域名访问文件时,OSS 会在响应头中增加 Content-Disposition: attachment 和 x-oss-force-download: true,导致文件被强制下载而不是预览。这个问题特别影响在 2022/10/09 之后新开通 OS…

spring boot整合https协议

整体目录 1. 生成SSL证书 首先,使用keytool生成一个自签名证书。打开命令行工具并运行以下命令: keytool -genkeypair -alias myserver -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 这将创建一个名为keystore.jks的文件&#xf…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

游戏引擎学习第10天

视频参考:https://www.bilibili.com/video/BV1LyU3YpEam/ 介绍intel architecture reference manual 地址:https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html RDTS(读取时间戳计数器)指令是 x86/x86_64 架构中的…

计算机网络(11)和流量控制补充

这一篇对数据链路层中的和流量控制进行详细学习 流量控制(Flow Control)是计算机网络中确保数据流平稳传输的技术,旨在防止数据发送方发送过多数据,导致接收方的缓冲区溢出,进而造成数据丢失或传输失败。流量控制通常…

PVE纵览-安装系统卡“Loading Driver”的快速解决方案

PVE纵览-安装系统卡“Loading Driver”的快速解决方案 文章目录 PVE纵览-安装系统卡“Loading Driver”的快速解决方案摘要通过引导参数解决PVE安装卡在“Loading Driver”问题官方解决方法 关键字: PVE、 显卡、 Loading、 Driver、 nomodeset 摘要 在虚拟机…

Docker在CentOS上的安装与配置

前言 随着云计算和微服务架构的兴起,Docker作为一种轻量级的容器技术,已经成为现代软件开发和运维中的重要工具。本文旨在为初学者提供一份详尽的指南,帮助他们在CentOS系统上安装和配置Docker及相关组件,如Docker Compose和私有…

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5

在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5 1. 安装 Oracle Database 23ai2. 连接 Oracle Database 23c3. 重启启动后,手动启动数据库4. 重启启动后,手动启动 Listener5. 手动启动 Pluggable Database6. 自动启动 Pluggable Database7. 设置开…

实验6记录网络与故障排除

实验6记录网络与故障排除 实验目的及要求: 通过实验,掌握如何利用文档记录网络设备相关信息并完成网络拓扑结构的绘制。能够使用各种技术和工具来找出连通性问题,使用文档来指导故障排除工作,确定具体的网络问题,实施…