C# TCP异步通信TcpClient
服务端监听
using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleAppTcp
{class Program{private static readonly object _object = new object();static void Main(string[] args){TcpListener listener = null;try{listener = new TcpListener(System.Net.IPAddress.Parse("127.0.0.1"), 9866);listener.Start();Console.WriteLine("启动监听");Task.Run(() =>{while (true){lock (_object){listener.BeginAcceptTcpClient(new AsyncCallback((a) =>{TcpListener tcpListener = (TcpListener)a.AsyncState;TcpClient client = tcpListener.EndAcceptTcpClient(a);string ip = client.Client.RemoteEndPoint.ToString();Console.WriteLine("收到客户端连接" + ip);Task task = Task.Run(async () =>{NetworkStream stream = client.GetStream(); while (true){try{if (!stream.CanRead){continue;}//收到客户端消息List<byte> list=new List<byte>();do{Memory<byte> buffer3 = new byte[200];await stream.ReadAsync(buffer3);list.AddRange(buffer3.ToArray());} while (stream.DataAvailable);string msg = Encoding.Unicode.GetString(list.ToArray());msg = msg.TrimEnd('\0','\r','\n');Console.WriteLine("收到客户端"+ ip + "消息:" + msg);//发送消息到客户端string input = "王安石变法" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");Console.WriteLine("发送到" + ip + "客户端>" + input);ReadOnlyMemory<byte> buffer2 = Encoding.Unicode.GetBytes(input).AsMemory();await stream.WriteAsync(buffer2);await stream.FlushAsync();}catch (Exception ex){Console.WriteLine("读取客户端消息异常." + ex.Message);break;}//Thread.Sleep(50);}});}), listener);}Thread.Sleep(100);}});}catch (SocketException ex){Console.WriteLine("监听异常" + ex);}finally{//listener?.Stop();}Console.ReadLine();}}
}
客户端代码
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace ConsoleAppTcpClient
{/// <summary>/// 客户端代码/// </summary>class Program{private static readonly object obj = new object();/// <summary>/// 是否继续连接了/// </summary>static bool isContinueConnect = false;static void Main(string[] args){Action action = null;//继续连接服务器Action continueConnect = () => {lock (obj) {if (!isContinueConnect){isContinueConnect = true;action();} }};action = () =>{TcpClient tcpClient = new TcpClient();tcpClient.BeginConnect(IPAddress.Parse("127.0.0.1"), 9866, a =>{TcpClient tcpClient = null;try{tcpClient = (TcpClient)a.AsyncState;tcpClient.EndConnect(a);Console.WriteLine("连接服务器成功");isContinueConnect = false;NetworkStream networkStream = tcpClient.GetStream();Task t1 = Task.Run(async () =>{while (true){try{if (!networkStream.CanWrite){continue;}//发送消息到服务器string input = "武松去九岭岗" + DateTime.Now.ToLongTimeString();Console.WriteLine("发送到服务器:" + input);ReadOnlyMemory<byte> buffer = Encoding.Unicode.GetBytes(input).AsMemory();await networkStream.WriteAsync(buffer);await networkStream.FlushAsync();Thread.Sleep(2000);}catch (Exception ex){Console.WriteLine("连接服务器异常" + ex.Message);continueConnect();break;}} });Task t2 = Task.Run(async () =>{while (true){try{if (!networkStream.CanRead){continue;}//收到服务器消息List<byte> list = new List<byte>();do{Memory<byte> buffer3 = new byte[200];await networkStream.ReadAsync(buffer3);list.AddRange(buffer3.ToArray());} while (networkStream.DataAvailable);string msg = Encoding.Unicode.GetString(list.ToArray());msg = msg.TrimEnd('\0', '\r', '\n');Console.WriteLine("收到服务器消息:" + msg);}catch (Exception ex){Console.WriteLine("连接服务器异常" + ex.Message);continueConnect();break;}} }); }catch (Exception ex){Console.WriteLine(ex.Message + ",10秒后重新连接");Thread.Sleep(10000);action();}}, tcpClient);}; action();Console.ReadKey();}}
}
C# TCP异步通信TcpClient相关推荐
- TCP使用TcpClient连接发送指令
//全局TcpClient tclient;/// <summary>/// 打开TCP连接/// </summary>/// <param name="ip& ...
- tcp 远程服务器,C#编程学习之使用TcpClient / BeginConnect测试远程服务器tcp端口连接-网络教程与技术
-亦是美网络...
有时候经常需要对一些服务器的端口进行tcp连接测试,通常使用"telnet IP地址 端口号"的方式即可,不能说这种方式不可取,只是使用起来比较麻烦,本着简单好用的目的,不如我们自 ...
- JMeter测试TCP/IP Socket应用的性能
摘要 本文描述了如何利用JMeter来测试TCP/IP Socket应用的性能.文章先对Socket作了一点简单介绍,然后提供并解释了两个样例Socket应用,最后介绍如何利用JMeter来对它们进行 ...
- C# 的TCPClient异步连接与异步读数据
Socket的TCP通讯 一. socket的通讯原理 服务器端的步骤如下. (1)建立服务器端的Socket,开始侦听整个网络中的连接请求. (2)当检测到来自客户端的连接请求时,向客户端发送收到连 ...
- QT示例:基于TCP 点对多Socket通讯(server,clients)
QT示例:基于TCP 点对多通讯(server,clients) 一.服务器server 二.客户端Client 下载:基于TCP 点对多Socket通讯 一.服务器server 因为对于客户端来说, ...
- 2.6-使用C#Winform开发Tcp/Udp网络小助手(含步骤和源码)
一.界面设计 在做软件之前使用"软件界面设计工具"先设计并绘制出软件界面,方便在写代码之前确认"功能需求"以及"交互流程". 这里使用的软件 ...
- C# 中使用TCP连接设置超时问题
在使用C#中用TCP连接去扫描IP的过程中,发现,TCP连接没有可以设置连接超时的方法,如果扫描到空的IP或连接失败,那要等20多秒,甚至更长, 我们可以重新去用Thread的join这个带参数的线程 ...
- qt:tcp通信工具(Client篇)
1.说明 使用qt写一个类似网上常见的网络调试工具.此篇为Client端.下一遍再写Server端. 2.基本流程 Client端相对简单:创建QTcpSocket对象,为对象的readyRead,e ...
- MATLAB实现TCP/IP通信
1.使用R2021a版本的函数 参考链接:MATLAB TCP t = tcpclient(address,port) t = tcpclient(address,port,Name,Value) 使 ...
- 糖儿飞教你学C++ Socket网络编程——18. MFC WinSock版的TCP通信程序
在4.2节中使用Win32 API方法制作了一个TCP异步通信的程序,本节将4.2节的程序用MFC框架重新编写,改写后程序的界面如图6-15所示,功能与4.2节的程序完全相同. 图6-15 MFC版T ...
最新文章
- 结队-结队编程项目贪吃蛇-项目进度
- 坦白讲!90%的数据分析师都不合格!!
- 并发编程(四)__ConcurrentHashMap
- linux编译openssl
- hdu 5691 Sitting in Line
- PTA15、班级人员信息统计 (10 分)
- 白话 Golang pprof
- 【IT之路】LoadRunner系列-Win7 64bit下搭建Loadrunner11破解版
- 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别【转】
- 货币代码无法进行ALE通信
- 李宏毅机器学习hw1~4作业 强化点
- C语言程序设计第五版谭浩强课后答案 第五章习题答案
- 网络舆情监测在教育行业的必要性
- linux加载dl580网卡驱动,HP DL580G5安装centos下的阵列卡驱动
- java 正则拼音,用于匹配拼音的正则表达式
- 沃通PDF签名证书 保障电子发票真实有效
- 做到这些让你逃离奴隶的束缚
- 如何下载Mbtiles离线地图数据
- 使用VB.net将PNG图片转成icon类型图标文件
- win10怎么玩经典扫雷?繁星软件园推荐大家试试Windows7Games吧,亲测好用的扫雷Win10电脑版下载!!!