Linux------网络套接字编程(二)

本文详细介绍了Linux环境下TCP网络套接字编程,包括TCP服务端和客户端的工作原理、函数接口,以及如何封装TCP socket。讨论了简单TCP通信程序的编写,涉及创建套接字、绑定地址、监听连接、数据收发等步骤。同时,文章提到了多线程和多进程TCP服务器的实现,解决了一次通信后无法再次通信的问题。

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

简单TCP通信程序的编写

工作原理

由于TCP的协议的服务,他是提供一个可靠的,面向字节流,有连接的传输服务,所以他与UDP协议是有部分不同的,但是还是右部分是相同的。具体工作的步骤如下:

1.TCP服务端通信服务的步骤:

  1. 创建套接字:先创建一个套接字,用于关联网卡与当前通信进程。
  2. 绑定地址信息:给服务端绑定地址信息(1.告诉系统收到的哪些数据应该交由当前socket 。2.发送数据到指定的源端地址信息)
  3. 开始监听:告诉系统当前的套接字可以开始处理连接的请求了。
    注意:如果说当前套接字的状态是不可处理连接的请求状态(没有处于listen状态),那么就算是现在有客户端请求连接,那么此时也会被丢弃掉。
    如果说,系统当前处于listen状态,那么就会建立连接。服务端会给每个客户端创建一个新的套接字,与指定的客户端进行后续的数据通信。
  4. 获取新建连接操作句柄:因为服务端会给每个连接成功的客户端创建一个新的套接字,这个新的套接字会只与这个客户进行通信,所以需要返回这个套接字的新的操作句柄。
  5. 收发数据:不用指定对端地址了,因为新建的套接字只与固定的客户端进行连接,所以新建套接字有完整的五元组。
  6. 关闭套接字:释放资源。

2.TCP客户端通信的操作步骤:

  1. 创建套接字:用来关联网卡与当前进程。
  2. 地址绑定信息:不推荐给客户端绑定地址信息。
    原因:
    ①:一个端口只能被一个进程使用,一旦主动绑定固定端口则客户端程序只能运行一个。
    ②:一旦端口出现冲突(要绑定的端口已经被别人绑定了),那么绑定就会失败。
    ③:就算不主动绑定,在发送数据的时候,系统也会进行自动绑定合适的地址。
    ④:客户端在使用什么地址发送数据给客户端其实并不重要,重要的是与其进行通信。
  3. 发送数据
  4. 接收数据
  5. 关闭套接字

函数接口

TCP通信程序的函数接口和UDP通信程序的函数接口有相同的也有不同的,如下:
1.创建套接字:int socket(int domain,int type,int protocal);
其中:

  • domain:地址域类型,由于我们目前学习是IPV4地址域类型,所以填写AF_INET。

  • type:数据传输方式,因为是TCP协议的通信,所以需要的可以提供面向字节流,可靠的,基于连接的流式套接字,所以填写SOCK_STREAM。

  • protocal:协议类型,对于tcp协议,应该传,IPPORTO_TCP进去,但是我们在type参数上已经传给了流式套接字,所以可以默认写0,在流式套接字类型上,0默认表示为tcp协议。

返回值:成功返回操作句柄,失败返回-1&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值