C# 使用TCP发送和接收消息

本文详细介绍了如何在C#中使用Socket类实现客户端与服务器的TCP/IP连接,包括建立连接、异步发送和接收消息的过程。
摘要由CSDN通过智能技术生成

客户端连接服务器

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;
    }
}

发送消息

定义

/// <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;
}

应用

Task<int> len = siExecutor.Send(bytes);		
// 这里可以处理一些其他工作
// 使用len.Result并处理(此步导致阻塞等待,会等待异步返回)
Console.Write($"已发送长度:{len.Result}");

接收消息

定义

/// <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;
}

应用

Task<byte[]> rawData = siExecutor.Receive(14);
// 此处可以进行其他工作
// 使用rawData.Result并处理(会等待异步返回)
Console.WriteLine(BitConverter.ToString(rawData.Result);)
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GitHub是一个基于web的版本控制和源代码托管平台。它提供了一个方便的界面,使开发者能够更轻松地管理和协作开发项目。GitHub是一个开放的平台,任何人都可以免费注册一个账户并创建自己的仓库。 使用GitHub,开发者可以将他们的代码仓库上传到平台上,并与其他开发者共享。这使得多人协作开发变得更加方便。开发者可以通过提交和合并请求来管理代码的更改,以及与团队成员讨论并审查代码。GitHub还提供了一系列的工具和功能,如问题跟踪、维基页面、部署、持续集成等,帮助开发者更好地管理和组织项目。 除了个人和团队项目外,GitHub还是开源社区的重要组成部分。许多开源项目都托管在GitHub上,任何人都可以自由地查看、复制、修改和贡献代码。开发者可以发现并加入他们感兴趣的开源项目,并与他人合作改进和维护。在GitHub上,开源社区可以通过拉取请求和议题来推动项目的发展。 GitHub不仅用于开发代码,还扩展到其他领域。许多学术研究项目也使用GitHub来管理和共享代码、数据集和文档。人们还可以使用GitHub Pages来创建静态网站,以展示他们的项目、博客或个人简历。 总之,GitHub提供了一个便捷的平台,使开发者能够更好地管理和协作开发项目。它成为开源社区的中心,促进了代码的共享和合作,使开发人员能够更好地学习和成长。无论是个人项目、团队协作还是开源贡献,GitHub都发挥着重要的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值