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

TCP通讯CS模式之C#设计笔记(十八)

一、服务器端侦听到客户端连接后,可通过发送与接收函数实现数据交互、通讯,如下是客户端与服务器端实现具体流程与示例,仅供参考。
二、客户端:
1、Client启动
TcpClient tcp=new TcpClient(ip,port);
tcp.ReceiveTimeout=1000;
2、Client连接
NetworkStream stream = tcp.GetStream();
3、数据发送
if (stream.CanWrite)
{
byte[] StreamByte = new Byte[1024];
StreamByte = NGANCore.TCPListener.strToToByte(sendText);
stream.Write(StreamByte, 0, StreamByte.Length);
}
4、数据接收
if (stream.CanRead)
{
byte[] StreamByte = new Byte[1024];
stream.Read(StreamByte, 0, StreamByte.Length);
ReciveText = NGANCore.TCPListener.byteToStr(StreamByte);
}
5、关闭client
tcp.close();
三、服务器端
1、定义TCP消息类
public class TCPMessage
{
public bool Issend { get; set; }
public int Port { get; set; }
public string ReciveMessage { get; set; }
public string SendMessage { get; set; }
public TCPMessage()
{
Issend = false;
Port = 8080;
SendMessage = “”;
ReciveMessage = “”;
}
public TCPMessage(bool issend, int port, string Sendmessage, string Recivemessage)
{
Issend = issend;
Port = port;
ReciveMessage = Recivemessage;
SendMessage = Sendmessage;
}
}
2、定义TCP事件参数
public class TcpEventArgs : EventArgs
{
public string TcpMsg { get; set; }
public TcpEventArgs(string msg)
{
TcpMsg = msg;
}
}
3、服务端启动
TcpListener server = new TcpListener(TcpCmd.Port);
server.Start();
4、侦听
TcpClient tcp = server.AcceptTcpClient();
NetworkStream stream = tcp.GetStream();
5、发送
if (stream.CanWrite)
{
if (TcpCmd.SendMessage.Trim() != “”)
{
byte[] StreamByte = new byte[2048];
StreamByte = strToToByte(TcpCmd.SendMessage);
stream.Write(StreamByte, 0, StreamByte.Length);
}
}
6、接收
if (stream.CanRead)
{
byte[] StreamByte = new byte[2048];
if (stream.Read(StreamByte, 0, StreamByte.Length)>0)
{
string strRecive = byteToStr(StreamByte);
AddDataToList(new TCPMessage(false, TcpCmd.Port, TcpCmd.SendMessage, strRecive));//添加到接收消息队列中
return true;
}
else
{
return false;
}
}
7、关闭
stream.Close();
tcp.Close();
server.Stop();

相关文章:

  • Python期末复习题:函数
  • treeSelect树组件设置父节点禁用
  • Vue使用axios进行get请求拼接参数的两种方式
  • STM32存储器组织-STM32存储器映像-嵌入式SRAM-STM32位段-嵌入式闪存-STM32启动配置
  • session共享问题及四种解决方案-前端存储、session的复制 、session粘性、后端存储(Mysql、Redis等)
  • 算法篇-------贪心2
  • Python图像处理笔记
  • 基于51单片机的舞蹈机器人四路步进电机控制仿真
  • 8、如何使用FactoryBean向Spring容器中注册bean?
  • 知识蒸馏 | YOLOv7知识蒸馏实战篇 | 2/2*
  • MySQL纯代码复习(上)
  • [附源码]Python计算机毕业设计白果园网上水果超市
  • 【JVM】java的jvm类加载器和类加载子系统
  • 正则表达式(常用最新版)
  • NX二次开发-调内部函数SEL_set_type_filter_index_by_label设置类型过滤器例子剖析怎么查找内部函数调用内部函数
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【css3】浏览器内核及其兼容性
  • 【RocksDB】TransactionDB源码分析
  • CSS 三角实现
  • DataBase in Android
  • EOS是什么
  • HTML中设置input等文本框为不可操作
  • Java到底能干嘛?
  • Java应用性能调优
  • jquery cookie
  • js写一个简单的选项卡
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Promise初体验
  • Wamp集成环境 添加PHP的新版本
  • webpack入门学习手记(二)
  • Web设计流程优化:网页效果图设计新思路
  • 给第三方使用接口的 URL 签名实现
  • 关于for循环的简单归纳
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 简单数学运算程序(不定期更新)
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端知识点整理(待续)
  • 三分钟教你同步 Visual Studio Code 设置
  • 首页查询功能的一次实现过程
  • 听说你叫Java(二)–Servlet请求
  • 物联网链路协议
  • 再次简单明了总结flex布局,一看就懂...
  • ​configparser --- 配置文件解析器​
  • # centos7下FFmpeg环境部署记录
  • (¥1011)-(一千零一拾一元整)输出
  • (二十四)Flask之flask-session组件
  • (六)c52学习之旅-独立按键
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (十八)三元表达式和列表解析
  • (十六)一篇文章学会Java的常用API
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net refrector
  • .NET 使用配置文件
  • .NET程序员迈向卓越的必由之路