Linux C++ Socket编程入门

本文介绍了Linux C++ Socket编程的基础知识,包括套接字概念、端口号分类、创建Socket、绑定IP、服务器监听、客户端连接、数据收发等。讲解了套接字在TCP连接中的作用,通过示例代码展示了服务器和客户端的基本交互流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

    在看着这篇博客之前,希望各位还是有一些计算机网络基础。还有一些C++的入门基础,不然会看的一头雾水。

2. 套接字简单介绍

    目前国际比较通用的为五层协议,即物理层,数据链路层,网络层(IP),传输层(TCP/UDP),应用层。

    下层为上层提供服务,上层的实现有需要下层为其提供服务。这里就不做深入的介绍,这要将个套接字。

    在运输层中,TCP连接的端点称为套接字或插口,端口号拼接到IP地址则形成套接字。

套接字 socket = {IP地址:端口号}

    每一条TCP连接唯一地被通信两端的两个端点(两个套接字)所确定,即:

TCP连接 ::= {socket1,socket2} = {(IP1:PORT1),(P2:PORT2)}

3. 端口号的介绍

    端口号分为两类:

    (1)服务器使用的端口号:

    包括熟知端口号或系统端口号,数值为0~1023。

常用的熟知端口号
应用程序   FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(TRAP) HTTPS
熟知端口号 21 23 25 53 69 80 161 162 443

    以及登记端口号,数值为1024~49151。

    (2)客户端使用的端口号:数值为49152~65535


4. 创建Socket套接字

/* Create a new socket of type TYPE in domain DOMAIN, using
   protocol PROTOCOL.  If PROTOCOL is zero, one is chosen automatically.
   Returns a file descriptor for the new socket, or -1 for errors.  */
extern int socket (int __domain, int __type, int __protocol) __THROW;

这是C++Socket函数的原型,定义于<sys/socket.h>中。

参数 :

__domain为地址家族,一般填写AF_NET

__type为类型,比如TCP则为SOCKET_STREM,UDP则为SOCKET_DGRAM。(觉得这一点和python很想。虽然Java连接socket的时候是直接选择TCP类或UDP类然后给予IP地址和端口号就可以了。)

__protocol为协议编号,一般为0。(说真的,我也不知道这个是干嘛的!)

返回:

一个套接字的标识符。每个套接字都有唯一的标识符。


5. 绑定IP地址(bind)

/* Give the socket FD the local address ADDR (which is LEN bytes long).  */
extern int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len)
     __THROW;

像前面说的那样,要是两个地方的主机连接起来,需要有IP地址和端口号来识别。IP地址确定主机,端口号确定主机里面的进程,即需要把数据交付给哪个主机的哪个进程。bind可以将socket和IP地址绑定起来,意思差不多就是这样。

参数:

__fd为套接字的唯一标识符,就是上面的返回值。

__addr简单的理解为一个封装了IP地址和端口号的结构体。以下会继续介绍。

__len为上面__addr的长度,直接sizeof(struct sockaddr),

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值