C#网络编程--TCP/IP协议与Socket的区别以及关系

在我们网络开发或者对接数据过程中,常常会听到有人说TCP/IP协议 、或者Socket 套接字,但是对于那些刚出茅庐的童鞋们,可能很容易被混淆,在这里我我们简单说一下,总结归纳。

1. TCP/IP 协议

定义:

TCP/IP 是传输控制协议/互联网协议的缩写,是一组用于互联网通信的标准协议集

层次结构:

• 应用层:HTTPFTPSMTP 等。

• 传输层:TCP(传输控制协议)、UDP(用户数据报协议)。

• 网络层:IP(互联网协议)。

• 链路层:以太网、Wi-Fi 等。

功能:

• IP:负责将数据包从源主机发送到目标主机。

• TCP:提供可靠的、面向连接的数据传输服务。

• UDP:提供无连接的数据传输服务,不保证数据的可靠性和顺序。

2. Socket

定义:

Socket(套接字)是一种通信机制,允许不同进程之间通过网络进行通信。它提供了一种抽象的接口,使得程序员可以方便地使用 TCP/IP 协议进行网络编程。(就是因为TCP/IP协议也是Socket协议之一,所以很容易混淆!!!)

类型:

• 流式套接字(Stream Sockets):基于 TCP,提供可靠的、面向连接的服务。

• 数据报套接字(Datagram Sockets):基于 UDP,提供无连接的服务。

功能:

• 创建连接:建立和断开网络连接。

• 数据传输:发送和接收数据。

• 地址绑定:将套接字绑定到特定的 IP 地址和端口号。

• 监听连接:服务器端监听客户端的连接请求。

• 接受连接:服务器端接受客户端的连接请求。

3. 区别(划重点)

概念层面:

TCP/IP:是一组通信协议,定义了数据在网络中的传输规则和格式。

Socket:是一种编程接口,提供了应用程序与网络通信的桥梁。

功能层面:

TCP/IP:负责数据的路由、传输、分段和重组等低层网络操作。

Socket:提供了高级的 API,使开发者可以方便地进行网络编程,而不需要关心底层的网络细节。

4. 关系(划重点)

• 依赖关系:Socket 是基于 TCP/IP 协议实现的。通过 Socket,应用程序可以利用 TCP/IP 协议提供的服务进行网络通信。

• 抽象层次:TCP/IP 协议位于较低的网络层次,负责数据的传输和路由;Socket 位于较高的应用层次,提供了一个抽象的接口,使得开发者可以更容易地编写网络应用程序。

• 实现方式:在 C# 中,System.Net.Sockets 命名空间提供了 Socket 类,用于实现基于 TCP/IP 的网络通信。TcpClient 和 TcpListener 类则是更高层次的封装,简化了 TCP 通信的实现(相当有一个标准通讯模版,开箱即用)

5. 示例代码

使用 Socket 类实现 TCP 通信

csharp 复制代码
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

class SocketClientExample
{
    static void Main()
    {
        try
        {
            // 创建 Socket 实例
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            // 连接到服务器
            client.Connect("127.0.0.1", 13000);

            // 发送数据
            string message = "Hello, Server!";
            byte[] data = Encoding.ASCII.GetBytes(message);
            client.Send(data);

            // 接收响应
            byte[] buffer = new byte[256];
            int bytesRead = client.Receive(buffer);
            string response = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Server response: " + response);

            // 关闭连接
            client.Shutdown(SocketShutdown.Both);
            client.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
    }
}

使用 TcpClient 和 TcpListener 类实现 TCP 通信

csharp 复制代码
using System;
using System.Net.Sockets;
using System.Text;

class TcpServerExample
{
    static void Main()
    {
        try
        {
            // 创建 TcpListener 实例并开始监听
            TcpListener listener = new TcpListener(IPAddress.Any, 13000);
            listener.Start();

            Console.WriteLine("Server started. Waiting for connections...");

            // 接受客户端连接
            TcpClient client = listener.AcceptTcpClient();
            Console.WriteLine("Client connected.");

            // 获取 NetworkStream 用于读写数据
            NetworkStream stream = client.GetStream();

            // 接收客户端发送的数据
            byte[] buffer = new byte[256];
            int bytesRead = stream.Read(buffer, 0, buffer.Length);
            string request = Encoding.ASCII.GetString(buffer, 0, bytesRead);
            Console.WriteLine("Received: " + request);

            // 发送响应给客户端
            string response = "Hello, Client!";
            byte[] responseData = Encoding.ASCII.GetBytes(response);
            stream.Write(responseData, 0, responseData.Length);

            // 关闭连接
            stream.Close();
            client.Close();
            listener.Stop();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error: " + e.Message);
        }
    }
}

6. 总结

其实两个说的不是同个东西,但是它们又密不可分。(承上启下的关系吧)

TCP/IP 是一组网络通信协议,定义了数据在网络中的传输规则。

Socket 是一种编程接口,提供了应用程序与网络通信的桥梁。
通过 Socket,开发者可以方便地利用 TCP/IP 协议进行网络编程。理解它们之间的关系有助于更好地进行网络应用开发。

相关推荐
EasyNVR22 分钟前
国标GB28181视频监控平台EasyCVR保驾护航休闲娱乐“九小场所”安全运营
网络·安全
Ai野生菌33 分钟前
工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署
网络·人工智能·安全·大模型·llm
melck1 小时前
liunx日志查询常用命令总结
java·服务器·网络
weixin_307779131 小时前
使用C#实现从Hive的CREATE TABLE语句中提取分区字段名和数据类型
开发语言·数据仓库·hive·c#
时光追逐者2 小时前
在 Blazor 中使用 Chart.js 快速创建数据可视化图表
开发语言·javascript·信息可视化·c#·.net·blazor
【云轩】2 小时前
《混沌钟的RISC-V指令集重构》
网络·安全
EasyGBS2 小时前
视频设备轨迹回放平台EasyCVR打造视频智能融合新平台,驱动智慧机场迈向数字新时代
网络·人工智能·安全·音视频
EasyGBS3 小时前
视频设备轨迹回放平台EasyCVR综合智能化,搭建运动场体育赛事直播方案
网络·安全·音视频
与火星的孩子对话3 小时前
Unity3D开发AI桌面精灵/宠物系列 【三】 语音识别 ASR 技术、语音转文本多平台 - 支持科大讯飞、百度等 C# 开发
人工智能·unity·c#·游戏引擎·语音识别·宠物