C# 使用TCP发送和接收消息
发布时间
阅读量:
阅读量
文章目录
-
-
客户端连接服务器
-
发送消息
-
- 定义
- 应用
-
接收消息
-
- 定义
- 应用
-
客户端连接服务器
using System.Net.Sockets;
using System.Net;
Socket clientSocket = null;
string ip = "192.168.1.2", myIP = "192.168.1.1";
int port = 8080;
// 设置连接
EndPoint myPoint = new IPEndPoint(IPAddress.Parse(myIP), 0); // 绑定本地IP(本地多网口时),0表示任意端口
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port); // Server IP 和端口
/// <summary>
/// 建立与服务器的TCP/IP连接
/// </summary>
/// <returns>成功返回true,反之返回false</returns>
public Boolean Connect()
{
Console.Write("连接中...");
//创建一个新的Socket对象
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 建立TCP / IP连接
try
{
clientSocket.Bind(myPoint); //绑定本地IP,多IP防止串(若无此IP则可能抛出异常)
clientSocket.Connect(point); //尝试连接
Console.WriteLine("连接成功!");
return true;
}
catch (Exception ex)
{
Console.WriteLine($"连接异常:\n{ex}");
clientSocket.Close();
clientSocket.Dispose();
return false;
}
}
csharp

发送消息
定义
/// <summary>
/// 发送执行函数(使用异步方式发送消息,不用阻塞等待)
/// </summary>
/// <param name="msg">待发送信息的byte数组</param>
/// <returns></returns>
public async Task<int> Send(byte[] msg)
{
if (clientSocket is null || !clientSocket.Connected) while (!Connect()) ; // 如果未连接,就连接上
int len = await Task<int>.Run(() => clientSocket.Send(msg)); //把字节数组发送到服务器端
Console.WriteLine("发送成功!");
return len;
}
csharp

应用
Task<int> len = siExecutor.Send(bytes);
// 这里可以处理一些其他工作
// 使用len.Result并处理(此步导致阻塞等待,会等待异步返回)
Console.Write($"已发送长度:{len.Result}");
csharp
接收消息
定义
/// <summary>
/// 接收信息(使用异步方式接收消息,不用阻塞等待)
/// </summary>
/// <returns>返回字节数组</returns>
public async Task<byte[]> Receive(int toReadLen)
{
if (clientSocket is null || !clientSocket.Connected) while (!Connect()) ; // 如果未连接,就连接上
byte[] rawData = new byte[toReadLen]; // 接收的原数据的字节数组
int len = await Task<int>.Run(() => clientSocket.Receive(rawData, 0, toReadLen, SocketFlags.None)); // 接收到扫码器传来的信息
return rawData;
}
csharp

应用
Task<byte[]> rawData = siExecutor.Receive(14);
// 此处可以进行其他工作
// 使用rawData.Result并处理(会等待异步返回)
Console.WriteLine(BitConverter.ToString(rawData.Result);)
csharp
全部评论 (0)
还没有任何评论哟~
