在很多WinForm的程序中,会有客户端之间相互通信的需求,或服务端与客户端通信的需求,这时就要用到TCP/IP的功能。在.NET中,主要是通过Socket来完成的,下面的例子是通过一个TcpListerner作为监听,等待TcpClient的连接,连接成功后就可以利用NetStream进行信息互通了。

在互相通信过程中,发送和接收分别在不同的线程中处理,并且还要处理UI更新。

using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Sockets;namespace WinFormsDemo15
{public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 创建连接后的网络流/// </summary>NetworkStream _stream;private void ConnectionButton_Click(object sender, EventArgs e){if (IsServer.Checked){AcceptTcpClient();}else{var tcpClient = new TcpClient(IPTextBox.Text, int.Parse(PortTextBox.Text));_stream = tcpClient.GetStream();ReciveMessage(_stream);}}/// <summary>/// 在一个新线程中接收TcpClient连接/// </summary>void AcceptTcpClient(){Task.Run(() =>{var listener = new TcpListener(IPAddress.Any, int.Parse(PortTextBox.Text));listener.Start();var tcpClient = listener.AcceptTcpClient();this.Invoke(() =>{YouTextBox.Text += $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} \r\n收到客户端连接。\r\n";});_stream = tcpClient.GetStream();ReciveMessage(_stream);});}/// <summary>/// 接收消息/// </summary>/// <param name="stream">网络流</param>void ReciveMessage(NetworkStream stream){Task.Run(() =>{while (true){var messageArr = new byte[1024];stream.Read(messageArr, 0, messageArr.Length);this.Invoke(() =>{var message = System.Text.Encoding.UTF8.GetString(messageArr).Trim('\0');YouTextBox.Text += $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 对方说:\r\n{message}\r\n";});}});}/// <summary>/// 发送消息/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void SendButton_Click(object sender, EventArgs e){var messageArr = System.Text.Encoding.UTF8.GetBytes(MyTextBox.Text);_stream.Write(messageArr, 0, messageArr.Length);_stream.Flush();YouTextBox.Text += $"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 我说:\r\n{MyTextBox.Text}\r\n";MyTextBox.Clear();}}
}

下面是演示结果:

WinForm(十五)窗体间通信相关推荐

  1. 利用委托 实现窗体间通信,非原创

    copy自:https://www.cnblogs.com/hugoNB/p/7130562.html,这个作者写的浅显易懂,就复制下来自己看 实现过程: 这里主要是用到委托实现,所以主要描述一下委托 ...

  2. C#不同窗体间通信,数据传递

    在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道.有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后 ...

  3. AUTOSAR从入门到精通100讲(三十五)-Lin通信协议栈分析三部曲LinTrcv配置及代码分析

    LinTrcv 0.Lin通信协议栈简介: LIN通信服务是一组用于与LIN通信系统进行车辆网络通信的模块.提供统一的LIN网络接口.对应用层程序隐藏协议信息和消息属性的特性. Lin通信服务包括: ...

  4. 通信算法之七十五:无人机通信-接收信号解析破解

    无人机通过无线信号与地面联系.无人机的反制流程主要有侦测.识别.追踪和打击.侦测和识别是进行无人机反制的基础,对无人机数传和测控信号实时搜索.探测和报警,获取无人机数传和测控信号的参数测量.单站测向. ...

  5. 十五天精通WCF——第六天 你必须要了解的3种通信模式

    十五天精通WCF--第六天 你必须要了解的3种通信模式 原文:十五天精通WCF--第六天 你必须要了解的3种通信模式 wcf已经说到第六天了,居然还没有说到这玩意有几种通信模式,惭愧惭愧,不过很简单啦 ...

  6. WinForm窗体间如何传值

    窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式: 公共静态变量: 使用共有属性: 使用委托与事件: 通过构造函数把主窗体传递到从窗体中: 一.通过静态变量 特点:传值是双 ...

  7. Winform程序窗体间的跳转

    关于Winform程序窗体间的跳转问题: 对于编程新手来讲,winform程序窗体间的跳转,经常会出现一些异常,或是弹出重复的窗口,如下图 下面给出一种方法,可以很好的避免掉这样的问题: 首先,在主程 ...

  8. 网络云存储技术Windows server 2012 (项目十五 存储服务间的数据同步)

    网络云存储技术Windows server 2012 (项目十五 存储服务间的数据同步) 目录 前言 一.项目背景 二. 项目实训题 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面 ...

  9. 北京智能佳科技有限公司亮相第十五期“科学城·云推介”直播间

    2020注定是不平凡的一年,新年伊始新冠爆发,人们经历了数月的至暗时期,经济的低迷,市场的萎缩,在不断地冲击着人们的生活,但同时,机遇也出现在人们面前.作为科技时代下智慧的产物,人工智能为疫情做出了巨 ...

最新文章

  1. 莫比乌斯函数+莫比乌斯反演
  2. pod实例数是什么意思_[灌水] Kubernetes In Action: Pod
  3. JavaFX UI控件教程(十六)之Separator
  4. 采用Spring管理Bean和依赖注入
  5. [leetcode]1.Two Sum
  6. xshell 无法定位输入点_linux基础知识个人总结
  7. php ajax 返回字符串而不是对象
  8. hbuilder怎么设置网页的大小_怎么免费将图片转成PDF?这个方法超简单
  9. 各区区号的字段和名称
  10. js 实现下拉菜单 完整代码
  11. 短信API接口demo示例-C#/Message/Send
  12. 最大子列和问题(PTA)
  13. react native 8081 端口号被占
  14. win10 +cude9.2+相匹配的cudnn+相匹配的tensorflow+ssd学习之路(问题百出2)
  15. 又是被打败的一天 (记招商银行笔试)
  16. 推荐书、网站(大多为计算机相关)
  17. 由Table_locks_waited想到的mysql 表锁问题
  18. 【第三届蓝桥杯】手机尾号
  19. 五 我们经常会忘记,要学会 走路 才能 奔跑,Python基础教程
  20. 计算机毕业设计选题建议

热门文章

  1. 我的炉子和空调应该使用哪种空气过滤器?
  2. 每日新闻 | 百度推出爱番番CRM开放平台 扶持入驻CRM服务商
  3. 惠普中国CEO孙振耀退休感言【转】
  4. 原来眼镜是可以摘掉的
  5. 记录一次wagon报错Failed to execute goal org.codehaus.mojo:wagon-maven-plugin:1.0:upload-single
  6. 江苏二本讲师年入43万, 武汉985教授税前17万, 浙江省属讲师每月6K, 各省青椒晒工资!...
  7. 21天学通python——第一天
  8. Winxp 蓝屏错误:Stop c0000218 unknown hard error 修复记
  9. 贝塞尔曲线的数学原理
  10. PMP支付考试费用相关介绍