当前位置: 首页 > news >正文 TcpListener和TcpClient简单例子 news 来源:原创 2024/5/18 12:02:59 ServerFrm.cs /**********TcpListener和TcpClient研究********** * 要点一:TcpListener起动后,如果有客户请求,就会建立一个TcpClient连接. * 要点二:通过TcpClient取得NetworkStream对象 * 要点三:通过NetworkStream的Write和Read方法向连接的另一端发或接收数据 * 要点四:传输的数据只能是字符流,需要编码. **********************************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace WinNet { public partial class ServerFrm : Form { private Thread processor; private TcpListener tcpListener; string clientStr; public ServerFrm() { InitializeComponent(); } private void ServerFrm_Load(object sender, EventArgs e) { //需要在新的线程里监听客户端 processor = new Thread(new ThreadStart(StartListening)); processor.Start(); } private void StartListening() { //创建一个监听对象 tcpListener = new TcpListener(IPAddress.Any, 8888); tcpListener.Start(); //循环监听 while (true) { try { //取得客户端的连接 TcpClient tcpClient = tcpListener.AcceptTcpClient(); //取得客户端发过来的字节流 NetworkStream clientStream = tcpClient.GetStream(); //把字节流读入字节数组 byte[] buffer = new byte[10]; clientStream.Read(buffer, 0, 10); //不可以在此直接设置this.Text,线程问题. clientStr= System.Text.Encoding.ASCII.GetString(buffer); //向客户端发送数据 buffer = System.Text.Encoding.ASCII.GetBytes("helloclint".ToCharArray()); clientStream.Write(buffer, 0, 10); //把字节流转化为字符串 this.Text = clientStr; tcpClient.Close(); clientStream.Close(); } catch { } } } } } ClientFrm.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; namespace WinNet { public partial class ClientFrm : Form { public ClientFrm() { InitializeComponent(); } private void ClientFrm_Load(object sender, EventArgs e) { //这就是服务器与客户端的一条通讯线路 TcpClient tcpClient = new TcpClient(); //得到服务器端IP,然后建立一个连接 IPHostEntry host = Dns.GetHostEntry("127.0.0.1"); tcpClient.Connect(host.AddressList[0], 8888); //取得数据流 NetworkStream clientStream = tcpClient.GetStream(); //只能向服务器发送字节流,所以要编码 byte[] response = new byte[10]; response = System.Text.Encoding.ASCII.GetBytes("helloserve".ToCharArray()); //通过Write方法把客户端数据发向服务器 clientStream.Write(response, 0, 10); //通过Read方法读取服务器端发过来的数据 clientStream.Read(response, 0, 10); this.Text = System.Text.Encoding.ASCII.GetString(response); tcpClient.Close(); clientStream.Close(); } } } 相关文章: C#自定义事件 socket传文件 c# 文件传输 SQL SERVER 2005分页查询语句 测试mssql中sql语句执行时间 SQL SERVER查询时间条件式写法 C#完整的通信代码(一)(点对点,点对多,同步,异步,UDP,TCP) C#完整的通信代码(二)(点对点,点对多,同步,异步,UDP,TCP) C# byte数组常用扩展 八种情况 C# Stream 和 byte[] 之间的转换 常用SQL/oracle循环语句 ORACLE 字符串操作 jquery下json数组的操作用法实例 c#写windows服务程序 JS操作select相关方法:新增 修改 删除 选中 清空 判断存在 等 2017年终总结、随想 Android交互 android图片蒙层 canvas 绘制双线技巧 eclipse的离线汉化 PHP那些事儿 Spring Boot快速入门(一):Hello Spring Boot Vue源码解析(二)Vue的双向绑定讲解及实现 阿里云爬虫风险管理产品商业化,为云端流量保驾护航 从零搭建Koa2 Server 计算机常识 - 收藏集 - 掘金 简单基于spring的redis配置(单机和集群模式) 如何使用Mybatis第三方插件--PageHelper实现分页操作 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件 移动端 h5开发相关内容总结(三) 汽车网络信息安全分析方法论 MySQL主从复制一致性检测 云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约 #我与Java虚拟机的故事#连载06:收获颇多的经典之作 (附源码)ssm本科教学合格评估管理系统 毕业设计 180916 (附源码)ssm教师工作量核算统计系统 毕业设计 162307 (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯) (论文阅读32/100)Flowing convnets for human pose estimation in videos (一)【Jmeter】JDK及Jmeter的安装部署及简单配置 (一)C语言之入门:使用Visual Studio Community 2022运行hello world (转)iOS字体 ***详解账号泄露:全球约1亿用户已泄露 .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别 .net项目IIS、VS 附加进程调试 .NET性能优化(文摘) .project文件 @test注解_Spring 自定义注解你了解过吗? [20160902]rm -rf的惨案.txt [CTO札记]如何测试用户接受度? [CTO札记]盛大文学公司名称对联 [FFmpeg学习]从视频中获取图片 [github配置] 远程访问仓库以及问题解决 [javascript]Tab menu实现 [LaTex]arXiv投稿攻略——jpg/png转pdf [Linux] MySQL数据库之索引
ServerFrm.cs /**********TcpListener和TcpClient研究********** * 要点一:TcpListener起动后,如果有客户请求,就会建立一个TcpClient连接. * 要点二:通过TcpClient取得NetworkStream对象 * 要点三:通过NetworkStream的Write和Read方法向连接的另一端发或接收数据 * 要点四:传输的数据只能是字符流,需要编码. **********************************************/ using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Threading; namespace WinNet { public partial class ServerFrm : Form { private Thread processor; private TcpListener tcpListener; string clientStr; public ServerFrm() { InitializeComponent(); } private void ServerFrm_Load(object sender, EventArgs e) { //需要在新的线程里监听客户端 processor = new Thread(new ThreadStart(StartListening)); processor.Start(); } private void StartListening() { //创建一个监听对象 tcpListener = new TcpListener(IPAddress.Any, 8888); tcpListener.Start(); //循环监听 while (true) { try { //取得客户端的连接 TcpClient tcpClient = tcpListener.AcceptTcpClient(); //取得客户端发过来的字节流 NetworkStream clientStream = tcpClient.GetStream(); //把字节流读入字节数组 byte[] buffer = new byte[10]; clientStream.Read(buffer, 0, 10); //不可以在此直接设置this.Text,线程问题. clientStr= System.Text.Encoding.ASCII.GetString(buffer); //向客户端发送数据 buffer = System.Text.Encoding.ASCII.GetBytes("helloclint".ToCharArray()); clientStream.Write(buffer, 0, 10); //把字节流转化为字符串 this.Text = clientStr; tcpClient.Close(); clientStream.Close(); } catch { } } } } } ClientFrm.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.Sockets; namespace WinNet { public partial class ClientFrm : Form { public ClientFrm() { InitializeComponent(); } private void ClientFrm_Load(object sender, EventArgs e) { //这就是服务器与客户端的一条通讯线路 TcpClient tcpClient = new TcpClient(); //得到服务器端IP,然后建立一个连接 IPHostEntry host = Dns.GetHostEntry("127.0.0.1"); tcpClient.Connect(host.AddressList[0], 8888); //取得数据流 NetworkStream clientStream = tcpClient.GetStream(); //只能向服务器发送字节流,所以要编码 byte[] response = new byte[10]; response = System.Text.Encoding.ASCII.GetBytes("helloserve".ToCharArray()); //通过Write方法把客户端数据发向服务器 clientStream.Write(response, 0, 10); //通过Read方法读取服务器端发过来的数据 clientStream.Read(response, 0, 10); this.Text = System.Text.Encoding.ASCII.GetString(response); tcpClient.Close(); clientStream.Close(); } } }