侧边栏壁纸
  • 累计撰写 74 篇文章
  • 累计创建 45 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录
C#

使用C#的Socket实现最简单的TCP通信示例代码

码峰
2022-07-05 / 0 评论 / 0 点赞 / 111 阅读 / 899 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-08-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

使用C#实现TCP通信有多个类可以使用,最简单的是直接使用TcpListener+TcpClient类,但有时候这两个类并不方便做更底层的一些配置。而使用Socket类可以做一些比较底层的TCP配置。这里给出使用Socket实现最简单的TCP通信示例代码。、

相关说明

IPAddress addr = IPAddress.Parse(“127.0.0.1”);
System.Net.IPAddress,IP地址的对象表示方法,将字符串IP地址转换为IPAddress实例。

IPEndPoint ipe = new IPEndPoint(addr, 21000);
System.Net.IPEndPoint,表示一个特定的IP地址和端口的组合,socket绑定等使用,是IP地址和端口被成对处理的对象。

AddressFamily.InterNetwork
System.Net.Sockets.AddressFamily是枚举,InterNetwork表示使用IP V4版本的地址进行通信。

SocketType.Stream
System.Net.Sockets.SocketType是枚举,Stream表示基于字节流,不重复数据的双向通信,使用TCP传输控制协议。

Sockert服务端的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace tcp_server
{
    class Program
    {
        static void Main(string[] args)
        {
            //============================================================================//
            // 1、服务监听地址和端口
            //============================================================================//
            string host = "127.0.0.1";
            // 端口号
            int port = 8081;
            // 将IP地址字符串转换为IPAddress对象
            IPAddress ip = IPAddress.Parse(host);
            // IP EndPoint
            IPEndPoint ipe = new IPEndPoint(ip, port);

            //============================================================================//
            // 2、创建socket服务端并监听端口
            //============================================================================//
            //创建TCP Socket对象
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //绑定EndPoint对象(地址)
            server.Bind(ipe);

            //开始监听
            server.Listen(0);
            Console.WriteLine("已经处于监听状态,等待客户端连接 . . . ");

            //============================================================================//
            // 3、等待客户端连接,并得到连接的Socket
            //============================================================================//
            Socket remote = server.Accept();
            Console.WriteLine("客户端建立连接 . . . ");

            byte[] bytes = new byte[1024];
            //从客户端接收消息
            int len = remote.Receive(bytes, bytes.Length, 0);
            //将消息转为字符串
            string recvStr = Encoding.ASCII.GetString(bytes, 0, len);
            Console.WriteLine("接收的客户端消息 : {0}", recvStr);

            string sendStr = "Response from server!";
            Console.WriteLine("发送消息给客户端 : {0}", sendStr);

            // 将字符串消息转为字节数组
            bytes = Encoding.ASCII.GetBytes(sendStr);
            //发送消息给客户端
            remote.Send(bytes, bytes.Length, 0);

            //============================================================================//
            // 4、关闭服务端的监听
            //============================================================================//
            if (server != null)
            {
                server.Close();
                server = null;
            }

            Console.WriteLine("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

Socket客户端的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

namespace tcp_client
{
    class Program
    {
        static void Main(string[] args)
        {
            //============================================================================//
            // 1、服务端地址
            //============================================================================//
            string hostAddr = "127.0.0.1";
            int port = 8081;
            // 将IP地址字符串转换为IPAddress对象
            IPAddress ip = IPAddress.Parse(hostAddr);
            // 创建终结点EndPoint
            IPEndPoint ipe = new IPEndPoint(ip, port);

            //============================================================================//
            // 2、创建socket连接客户端
            //============================================================================//        
            // 创建Socket并连接到服务器
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            // 连接到服务器
            client.Connect(ipe);

            string sendStr = "I am a Client!";
            Console.WriteLine("发送消息给服务端 : {0}", sendStr);
            // 将字符串消息转为字节数组
            byte[] bytes = Encoding.ASCII.GetBytes(sendStr);
            //发送消息给客户端
            client.Send(bytes, bytes.Length, 0);

            bytes = new byte[1024];
            //从客户端接收消息
            int len = client.Receive(bytes, bytes.Length, 0);
            //将消息转为字符串
            string recvStr = Encoding.ASCII.GetString(bytes, 0, len);
            Console.WriteLine("接收到的服务端响应的消息 : {0}", recvStr);

            //============================================================================//
            // 4、关闭连接
            //============================================================================//
            if (client != null)
            {
                client.Close();
                client = null;
            }

            Console.WriteLine("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}

运行结果

以上两个代码,分别建立两个控制台的项目,使用.net framework 4.0及以上的版本即可正常编译,运行结果如下:
服务端:
image

客户端:
image-1657017099137

0

评论区