简单的实现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——selenium爬取斗鱼房间信息

    from selenium import webdriver import os import json import time class Douyu: def __init__(self): # ...

  2. equals hashcode toString 方法的使用

    package com.wu.toString; import java.util.Date; import java.util.GregorianCalendar; /** * * @author ...

  3. python3入门之字符串

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 经过前面的介绍相信大家也对python有了一个初步的了解:本节主要介绍字符串,不管学习什么编语言字符串一定在其中扮演着重要的地位.本节主要讲解,字 ...

  4. Python3之requests模块

    Python标准库中提供了:urllib等模块以供Http请求,但是,它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 发送G ...

  5. Java中的Date Time 与SQL Server 2005里的Datetime 之间的交互

    Preface Environment:Platform: Windows XPLanguage: Java 1.5IDE: MyEclipse 6.0.1Database: SQL Server 2 ...

  6. AF 与 PF区别

    AF 表示ADDRESS FAMILY 地址族 PF 表示PROTOCL FAMILY 协议族 Winsock2.h中#define AF_INET 0#define PF_INET AF_INET ...

  7. C++_友元3-其他友元关系

    友元和类的关系还可以更复杂. 举个例子,假设出现了交互式遥控器,交互式遥控器能够让您回答电视节目中的问题,如果回答错误,电视将在控制器上产生嗡嗡声. 这个例子的问题,可以使用新的友元关系来解决.我把它 ...

  8. rest-assured之获取响应数据(Getting Response Data)

    我们使用rest-assured可以获得响应内容,比如:我们发起一个get请求 get("/lotto") 并且获得响应内容,我们有多种方式可以实现: // 通过流的方式获得响应内 ...

  9. [BZOJ 5415] 归程

    一棵KrusKal重构树,然而我数组开小了,忘记清空一个标记 洛谷传送门 BZOJ传送门 ......好像成权限题了Orz 回顾我们用KrusKal做生成树的时候,我们将边排序后连通各个连通块,那么边 ...

  10. sharepoint_study_2

    描述:向SharePoint中批量添加用户 解决:原文地址:http://bbs.winos.cn/thread-89236-1-1.html 一般情况下,要想登录SharePoint server ...