简单的实现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 串口 通信的更多相关文章

  1. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  2. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  3. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  4. TCP/UDP简易通信

    TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...

  5. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.3

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  6. 【转】TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    [转]TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP ...

  7. TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端)、UDP客户端

    目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的使用 框架源码结构 补充说明 源码地址 说明 之前有好几篇博客在讲TCP/UDP通信方 ...

  8. [Java] Tcp/udp 简单通信

    本文转自  我自己的博客guozeyiblog.cn 欢迎来訪 效果图: //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; i ...

  9. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

随机推荐

  1. 从HDU1004来看C++<map>

    最近做题有点浮躁~于是从HDU第一题开始刷,刷到1004题的时候突发奇想来复习一发很久没有用到过的map 题意是给你n个气球,每个气球有一种颜色,让你求出数量最多的气球颜色 因为颜色是气球数量的识别关 ...

  2. 【python】10分钟教你用Python做个打飞机小游戏超详细教程

    更多精彩尽在微信公众号[程序猿声] 我知道你们一定想先看效果如何 00 目录 整体框架 开始之前-精灵类Sprite 子弹类class Bullet 玩家飞机类class Player 敌机类clas ...

  3. php 面试常问问题

    1.看看简历,会问一些过去做的项目的用户量.pv.吞吐量.相关难点和解决方法等2.数据库设计经验,为什么进行分表? 分库?一般多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水 ...

  4. SDUT OJ 数据结构实验之链表一:顺序建立链表

    数据结构实验之链表一:顺序建立链表 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...

  5. Linux 常用命令大全(长期更新)

    常见指令 打包压缩相关命令 关机/重启机器 Linux管道 vim使用 用户及用户组管理 文件权限管理 更改文件的用户及用户组 更改权限 常用指令 ls 显示文件或目录 -l 列出文件详细信息l(li ...

  6. [BJOI2012]连连看 BZOJ2661 费用流

    题目描述 凡是考智商的题里面总会有这么一种消除游戏.不过现在面对的这关连连看可不是QQ游戏里那种考眼力的游戏.我们的规则是,给出一个闭区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y ...

  7. js 事件的阶段

    事件有三个阶段: 1.事件捕获阶段 :从外向内 2.事件目标阶段 :最开始选择的那个 3.事件冒泡阶段 : 从里向外   为元素绑定事件 addEventListener("没有on的事件类 ...

  8. XAF ORMDataModel构建的基础资料对象无法被调用显示的解决办法

    修正,其实只要在基础资料类中加入[XafDefaultProperty("名称")]标签即可. namespace NEO.ERP.Module.BusinessObjects.B ...

  9. 2.16 关于python/numpy

  10. [转] Java 使用Try-with-resources自动关闭资源

    [From] https://blog.csdn.net/wtopps/article/details/71108342 Try-with-resources Try-with-resources是J ...