简单的实现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. python获取函数参数默认值的两种方法

    1.使用函数的__defaults__魔术方法 demo: # coding=utf-8 def f(a,b,c=1): pass f.__defaults__ 输出结果: (1,) 2.使用insp ...

  2. 004 Android XML文件常用五大页面布局方式

    1.线性布局(LinearLayout)最常用 <1>使用线性布局,首先在xml文件中修改布局为LinearLayout 修改完成后,可在Component Tree中看见如下内容: &l ...

  3. Mongodb服务的设置成window服务自启动

    服务安装bat:例子 cd D: D: cd "Program Files" cd MongoDB\Server\3.0\bin mongod -dbpath "F:\w ...

  4. Win7电脑开机无法正常启动只能进入安全模式解决方式

    我们先尝试在开机的时候按F8进入安全模式,进入到安全模式后一次打开“控制面板”-“程序与功能”,然后将卡巴斯基卸载[ http://jingyan.baidu.com/article/ff42efa9 ...

  5. 167 Two Sum-Input array is sorted, 125 Valid Palindrome,344

    注意这两个元素不能是相同的. 解法一:二分查找法,逐一取数组中的值,然后second = target - numbers[i] , 用二分查找法求第二个值. 时间复杂度:O(nlongn) clas ...

  6. c# 多数值区间判断是否有重叠

    /// <summary> /// 金额区间判断帮助类 /// </summary> public static class DecimalRangeHelper { /// ...

  7. 计算机插U盘没用了

    今天遇到一个神奇的状况,我想把台机上面的文件通过U盘拷贝到我的笔记本上.文件拷到U盘上没问题,然后把U盘插到笔记本上,一点反应都没有.我想了下,这U盘肯定没坏.然后我笔记本又是新买没多久,一直爱护有加 ...

  8. Apache Shiro(五)-登录认证和权限管理ssm

    创建一个web动态项目 jar包 web.xml web.xml做了如下几件事情1. 指定spring的配置文件有两个 applicationContext.xml: 用于链接数据库的 applica ...

  9. pingUtil

    package unit; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamR ...

  10. JavaScript 精简笔记

    JavaScript 精简笔记,摘自 廖雪峰的官方网站. [From] https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51 ...