优秀的编程知识分享平台

网站首页 > 技术文章 正文

如何理解Socket(套接字)(编写socket套接字的步骤)

nanyue 2024-08-02 17:44:29 技术文章 7 ℃

看了如此多Socket定义,Socket到底是什么,我们看下如何在Golang中创建一个IPV4协议,面向TCP协议的Socket(套接字)

// 第一个参数(协议域) unix.AF_INET 代表 IPV4协议
// 第二个参数 (套接字类型) unix.SOCK_STREAM 代表 字节流类型
// 第三个参数(协议) unix.IPPROTO_TCP 代表 TCP协议(默认情况下可以传0)
socketFD, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_STREAM,syscall.IPPROTO_TCP)
  if err != nil {
    return nil, err
}

在调用syscall.Socket函数后,操作系统返回了一个与文件描述符类似的非负数fd,我们称之为套接字文件描述符( Socket Descriptor ),文章中简称SocketFD。

SocketFD是如何贯穿整个网络编程的,从Golang系统调用提供的诸多网络编程函数来看

// 挑选了一些关键函数 
func Socket(domain, typ, proto int) (fd int, err error)
func Bind(fd int, sa Sockaddr) (err error)
func Accept(fd int) (nfd int, sa Sockaddr, err error)
func Connect(fd int, sa Sockaddr) (err error)
func Read(fd int, p []byte) (n int, err error)
func Write(fd int, p []byte) (n int, err error)
func Close(fd int) (err error)
.....

如上函数都有一个共同点,即所有行为都是在 socketFD 基础上进行。依靠如上函数可以完成数据在应用进程和操作系统内核之间的传递,也更直观表达了 Socket是应用程序与网络协议栈进行交互的接口。

简单来说,Socket在应用进程视角就是一个数字 FD(非负数),客户端和服务端应用进程分别持有socketFD来完成两个远程进程间的通信。

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!

扫码进群领资料

Tags:

最近发表
标签列表