C# tcp udp 串口 通信
简单的实现tcp同步和异步,udp,串口通信
static List<TcpClientState> clientArray = new List<TcpClientState>();
static void AsyncTCP(IPEndPoint iep)
{
TcpListener listener = new TcpListener(iep);
listener.Start();
byte[] inValue = new byte[] { , , , , 0x20, 0x4e, , , 0xd0, 0x07, , };
listener.Server.IOControl(IOControlCode.KeepAliveValues, inValue, null);
#region//异步tcp
AsyncCallback dataReceiveAsyncCallback = null;
dataReceiveAsyncCallback = ar =>
{
TcpClientState innerclient = (TcpClientState)ar.AsyncState;
if ((innerclient.InnerClient == null) || (!innerclient.InnerClient.Connected))
return;
NetworkStream stream = innerclient.InnerClient.GetStream();
int num;
//异常断开
try { num = stream.EndRead(ar); }
catch { num = ; } if (num < )//断开连接
{
Console.WriteLine(innerclient.InnerClient.Client.RemoteEndPoint.ToString() + "断开连接");
clientArray.Remove(innerclient);
return;
} byte[] receivebytes = new byte[num];
Buffer.BlockCopy(innerclient.Buffer, , receivebytes, , num);
string s = Encoding.Default.GetString(receivebytes);
Console.WriteLine(s);
var data = Encoding.Default.GetBytes(string.Format("收到:{0}", s));
innerclient.InnerClient.GetStream().BeginWrite(data, , data.Length,
arw =>
{
((TcpClient)arw.AsyncState).GetStream().EndWrite(arw);
},innerclient.InnerClient);
stream.BeginRead(innerclient.Buffer, , innerclient.Buffer.Length, dataReceiveAsyncCallback, innerclient);
}; AsyncCallback connectAsyncCallbackcallback = null;
connectAsyncCallbackcallback = ar =>
{
var listen = (TcpListener)ar.AsyncState;
TcpClient client = listen.EndAcceptTcpClient(ar);
Console.WriteLine(client.Client.RemoteEndPoint.ToString() + "连接成功");
byte[] buf = new byte[client.ReceiveBufferSize];
TcpClientState innerclient = new TcpClientState(client, buf);
clientArray.Add(innerclient);
NetworkStream netstream = client.GetStream();
netstream.BeginRead(innerclient.Buffer, , innerclient.Buffer.Length, dataReceiveAsyncCallback, innerclient);
if (connectAsyncCallbackcallback == null) return;
listen.BeginAcceptTcpClient(connectAsyncCallbackcallback, ar.AsyncState);
};
listener.BeginAcceptTcpClient(connectAsyncCallbackcallback, listener);
Console.WriteLine("开始监听");
Console.Read(); #endregion
}
static void synctcp(IPEndPoint iep)
{
TcpListener listener = new TcpListener(iep);
Console.WriteLine("开始监听");
listener.Start();
byte[] inValue = new byte[] { , , , , 0x20, 0x4e, , , 0xd0, 0x07, , };
listener.Server.IOControl(IOControlCode.KeepAliveValues, inValue, null); #region //同步tcp
Thread listenThread = new Thread(() =>
{
while (true)
{
var client = listener.AcceptTcpClient();
Console.WriteLine(client.Client.RemoteEndPoint.ToString() + "连接成功");
Thread datareceiveThread = new Thread(() =>
{
NetworkStream stream = client.GetStream(); while (true)
{
if (stream.DataAvailable)
{
byte[] buf = new byte[client.Client.ReceiveBufferSize];
int len = client.Client.Receive(buf);
Console.WriteLine(Encoding.Default.GetString(buf, , len));
} }
});
datareceiveThread.Start();
}
});
listenThread.Start();
#endregion
}
static void udp(IPEndPoint iep)
{
Socket udpSocket=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
udpSocket.Bind(iep);
var remotEndPoint = new IPEndPoint(IPAddress.Parse("10.6.179.44"), ); Thread thread=new Thread(() =>
{
while (true)
{
if (udpSocket.Available > )
{ byte[] buf = new byte[udpSocket.Available];
udpSocket.Receive(buf);
Console.WriteLine(Encoding.Default.GetString(buf));
udpSocket.SendTo(buf, remotEndPoint);
} }
});
thread.Start();
Console.WriteLine("wait");
Console.Read();
} static void com(string com, int port)
{
var m_port = new SerialPort(com, port); m_port.DataReceived += (obj, args) =>
{
int length = m_port.ReadBufferSize;
byte[] buf = new byte[length];
m_port.Read(buf, , length);
string s = Encoding.Default.GetString(buf);
Console.WriteLine(s);
m_port.Write(buf, , buf.Length); };
m_port.Open();
}
tcp异步客户端
/// <summary> 连接服务端
/// </summary>
/// <param name="ip">服务端IP</param>
/// <param name="port">服务端端口</param>
static void AsynConnect(string ip, int port)
{
var serverEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);
var _client=new TcpClient();
_client.BeginConnect(serverEndPoint.Address, serverEndPoint.Port, asynresult =>
{
_client.EndConnect(asynresult);
Console.WriteLine("连上服务端{0}", _client.Connected);
if (_client.Connected)
{
NetworkStream stream = _client.GetStream();
byte[] buf = new byte[_client.ReceiveBufferSize];
AsyncCallback asyncCallback = null;
asyncCallback = asynreadresult =>
{
int num = ;
try
{
num = stream.EndRead(asynreadresult);
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
num = ;
}
if (num == )
{
Console.WriteLine("服务端断开");
return;
}
byte[] receivebytes = new byte[num];
Buffer.BlockCopy(buf, , receivebytes, , num);
Console.WriteLine(Encoding.Default.GetString(receivebytes));
stream.BeginWrite(receivebytes, , receivebytes.Length, result =>
{
stream.EndRead(result);
}, null); stream.BeginRead(buf, , buf.Length, asyncCallback, null);
};
stream.BeginRead(buf, , buf.Length, asyncCallback, null);
} }, _client); Console.Read();
}
C# tcp udp 串口 通信的更多相关文章
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- TCP/UDP简易通信
TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.3
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
[转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...
- TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端
目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...
- [Java] Tcp/udp 简单通信
本文转自 我自己的博客guozeyiblog.cn 欢迎来訪 效果图: //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; i ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
随机推荐
- 2. C语言文件操作经典习题
1. 统计英文文本文件中,有多少个大写字母.小写字母.数字.空格.换行以及其他字符. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> ...
- 3 hql语法及自定义函数(含array、map讲解) + hive的java api
本博文的主要内容如下: .hive的详细官方手册 .hive支持的数据类型 .Hive Shell .Hive工程所需依赖的jar包 .hive自定义函数 .分桶4 .附PPT hiv ...
- OEL6.8安装虚拟带库模拟器
最近在虚拟机下搭建了一个OSB备份环境,其中使用到了虚拟带库,以下是虚拟带库的配置过程,简要记录之. 1.下载虚拟带库的源码(mhvtl-2016-03-10.tgz). 2.解压缩源码. # cd ...
- GDI绘图写的简单扫雷
由于没话多少时间,这个扫雷我只实现了主要功能(扫雷功能,递归实现) 废话不多说,直接上代码 using System; using System.Collections.Generic; using ...
- flask 的上下文管理
Flask的上下文对象 Flask有两种Context(上下文),分别是 RequestContext 请求上下文 Request 请求的对象,封装了Http请求(environ)的内容 Sessio ...
- python之函数(一)
python有很多内置函数,可以直接调用.比如type(), len(), range(),max(), min(), filter().内置函数我们就先不多提,我们主要介绍自定义函数. 1. 函数的 ...
- C++_新特性2-RTTI运行阶段类型识别
这部分属于C++的新特性,感觉比较高阶的特性.我把它归于属于奇技淫巧的范畴.了解即可. RTTI是运行阶段类型识别(Runtime Type Identification)的简称. 这是添加到C++中 ...
- LeetCode74.搜索二维矩阵
74.搜索二维矩阵 描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 示 ...
- 下载 生成 requirements
生成你项目的所有 组件,模块 pip3 freeze > requirements.txt 下载requirements.txt 里的所有 模块 pip3 install -r requirem ...
- Codeforces - 38G 可持久化Treap 区间操作
题意:\(n\)个人排队,每个人有重要度\(p\)和不要脸度\(c\),如果第\(i\)个人的重要度大于第\(i-1\)个人的重要度,那么他们之间可以交换,不要脸度-1,交换后先前的第\(i\)个人也 ...