使用C#实现交互式TCP服务器通信:实现对话功能及退出机制

server/2024/10/11 11:21:59/

一、服务器

using System.Net;
using System.Net.Sockets;
using System.Text;
TcpListener server = new TcpListener(IPAddress.Any, 9999);
server.Start();
Console.WriteLine("服务已开启");
while (true)
{TcpClient client = server.AcceptTcpClient();Thread thread = new Thread(HandleCilent);thread.Start(client);
}
static void HandleCilent(object obj)
{TcpClient client = (TcpClient)obj;NetworkStream stream = client.GetStream();byte[] data = new byte[1024];int byteRead;try{while ((byteRead = stream.Read(data, 0, data.Length)) != 0){string message = Encoding.UTF8.GetString(data, 0, byteRead);Console.WriteLine("接收到" + message);byte[] response = Encoding.UTF8.GetBytes("服务器接收到" + message);stream.Write(response, 0, response.Length);}}catch (IOException ex){Console.WriteLine("客户端已断开"+ex.ToString());}finally {client.Close();}}

二、客户端

public class Program
{static void Main(string[] args){TcpClient client = new TcpClient("8.130.127.7", 9999);NetworkStream stream = client.GetStream();while (true){Console.WriteLine("请输入要发送的消息(输入 'exit' 退出):");string message = Console.ReadLine();if (message.ToLower() == "exit"){break;}byte[] data = Encoding.UTF8.GetBytes(message);stream.Write(data, 0, data.Length);// 接收服务器的响应byte[] responseData = new byte[1024];int bytesRead = stream.Read(responseData, 0, responseData.Length);string response = Encoding.UTF8.GetString(responseData, 0, bytesRead);Console.WriteLine("服务器消息:" + response);}client.Close();}
}

http://www.ppmy.cn/server/13546.html

相关文章

【智能算法】吉萨金子塔建造算法(GPC)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年,S Harifi等人受到观古代遗迹构造启发,提出了吉萨金子塔建造算法(Giza Pyramids Construction, GPC)。 2.算法原理 2.1算法思想 GPC模拟了古埃…

GDP数据为什么要修订

对GDP数据进行修订是国际上的通行做法。世界各国GDP数据都不是一锤定音,一次核算就固定不变,必须根据更加完整、可靠的基础数据不断修订。GDP的数据修订包括当期(当季、当年)数据修订和历史数据修订。GDP当期数据修订主要是在获得…

用wps自带工具给图片做标注

在wps中,选中wps中的图片,右键选择【编辑】进入图片编辑器,在选项卡面板右侧选择【标注】工具,再选择【添加文本】工具,即可直接在图片上输入文字,标注完成后选择【覆盖原图】就完成标注任务。

一些网络的常见问题

1. tcp和udp可以同时监听相同端口号吗? 答:可以。IP数据包首部有个叫协议字段,指出了上层协议是TCP还是UDP。 网络层读取数据包的时候,已经知道上层是什么报文,可以直接交给内核进程做区分处理。 2. 多个线程可以使用…

【Android GUI】从总体上了解Android的GUI体系

文章目录 概览Android硬件接口HALGralloc与Framebuffer Gralloc模块的加载Gralloc提供的接口Android原生的Gralloc实现打开framebuffer设备打开gralloc设备 参考 概览 Linux内核提供了统一的framebuffer显示驱动。设备节点/dev/graphics/fb*或者/dev/fb*,其中fb0表示…

移动桌面均覆盖-免费使用,解锁VIP!

hello,我是小索奇 分享一下剪映,附带windows和移动端哈 软件内所有功能都已经解锁了哈!不登录也是会员特权~ 相对于PR来说,用剪映省去了好多痛苦(用过的都懂,都是包装) 软件下载好之后双…

【IT运维入门(ITHW)系列】之「快速部署」第二期清单(持续更新)

ITHW是Information Technology Hello World的缩写简拼。意在提供IT领域的入门相关知识,近期给大家带来的是主流技术选型的快速部署系列,意在最大程度地简化部署过程,以便能快速体验或测试相关技术选型。 「快速部署」第一期清单 ITHW快捷部署…

机器学习总结

1. 如何理解机器学习中的有监督学习和无监督学习,举例? 机器学习中的有监督学习和无监督学习是两种主要的学习方式,它们的主要区别在于训练数据是否带有标签。 有监督学习: 就像你有一个老师,他会给你一堆带有答案的…