首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在服务器端和客户端调用recv和send函数时都要使用客户端的文件描述符?

在服务器端和客户端调用recv和send函数时都要使用客户端的文件描述符是因为这两个函数是用于在网络通信中进行数据传输的。在客户端和服务器之间建立网络连接后,客户端和服务器都会分别创建一个套接字(socket),套接字是网络通信的端点。客户端的套接字和服务器的套接字通过文件描述符来标识和操作。

在服务器端,当有客户端连接请求到达时,服务器会接受连接并创建一个新的套接字,该套接字用于与该客户端进行通信。服务器会为每个连接创建一个新的文件描述符,该文件描述符用于标识该连接的套接字。当服务器调用recv函数时,需要传入客户端的文件描述符作为参数,以指定从哪个客户端接收数据。

在客户端,当与服务器建立连接后,客户端也会创建一个套接字,并分配一个文件描述符用于标识该套接字。当客户端调用send函数时,需要传入服务器的文件描述符作为参数,以指定将数据发送到哪个服务器。

通过使用客户端的文件描述符作为参数,服务器和客户端可以在网络通信中正确地识别和操作各自的套接字,实现数据的可靠传输和通信的正常进行。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(BCS):https://cloud.tencent.com/product/bcs
  • 腾讯云游戏多媒体引擎(GME):https://cloud.tencent.com/product/gme
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

LinuxSOCKET编程详解

当进程打开一个文件,系统把一个指向此文件内部数据结构指针写入文件描述符表,并把该表索引值返回给调用者 。应用程序只需记住这个描述符,并在以后操作该文件使用它。...应用程序创建套接字后该套接字可以使用之前,必须调用其他过程来填充这些字段。 3、文件描述符文件指针区别: 文件描述符linux系统中打开文件就会获得文件描述符,它是个很小正整数。...文件指针:C语言中使用文件指针做为I/O句柄。文件指针指向进程用户区中一个被称为FILE结构数据结构。FILE结构包括一个缓冲区一个文件描述符。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv

8.1K10

网络中进程之间如何通信?

内核通过文件描述符来索引一个进程打开文件。当你需要读或写一个文件,你需要用文件描述符来标记它。 网络中进程通信 本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...当应用程序调用recv函数, 1)recv先等待s发送缓冲中数据被协议传送完毕,如果协议传送s发送缓冲中数据出现网络错误,那么recv函数返回SOCKET_ERROR; 2)如果s发送缓冲中没有数据或者数据被协议成功发送完毕后...注意:Unix系统下,如果recv函数等待协议接收数据网络断开了,那么调用recv进程会接收到一个SIGPIPE信号,进程对该信号默认处理是进程终止。...close() 函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

55620

socket知识点分享

调用了accept()函数后,默认是阻塞进程,直到有一个客户端请求连接,连接成功后返回一个新socket描述符,此后,服务器端即可使用这个新socket描述符与该客户端进行通信了,而旧socket...客户端说明:客户端通过调用connect()连接指定服务端socket,将会发起一个连接请求同步序列编号(SYN:是TCP/IP建立连接握手信号),服务器端接收到客户端发送过来连接请求时候会将请求方放进...SYN队列里,并且给客户端回复一个ACK+SYN,这称为第二次握手,客户端收到ACK+SYN之后,connect将返回,并发送确认连接帧ACK给服务器端,这是第三次握手,服务端收到ACK帧后,会将请求方从...read()/recv()读取数据: (1).当使用read()/recv()读取输入缓冲区数据时候,如果输入缓冲区没有数据,那么read()/recv()将会被阻塞,直到输入缓冲区中有数据可用读取..., int len, int flags ); /** 使用recv函数从TCP连接另一端接收数据。

53740

LinuxSOCKET编程详解

TCP/IP协议存在于OS中,网络服务通过OS提供,OS中增加支持TCP/IP系统调用——Berkeley套接字,如Socket,Connect,SendRecv等 UDP(User Data...当进程打开一个文件,系统把一个指向此文件内部数据结构指针写入文件描述符表,并把该表索引值返回给调用者 。应用程序只需记住这个描述符,并在以后操作该文件使用它。...应用程序创建套接字后该套接字可以使用之前,必须调用其他过程来填充这些字段。 3、文件描述符文件指针区别: 文件描述符linux系统中打开文件就会获得文件描述符,它是个很小正整数。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv

2.4K10

Python中TCP协议理解

而四次挥手是:当一个客户端主动发送断开close()请求服务器端却可以接收别的请求;要想真正结束,那么服务器端就需要被动调用断开close()。...8,TIME_WAIT状态 两端端口不能使用,要等到2MSL时间结束才可继续使用。 9,当连接处于2MSL等待阶段时任何迟到报文段都将被丢弃。...这些设备文件描述符被放在一个数组中,然后select调用时候遍历这个数组,如果对于文件描述符可读则会返回该文件描述符。...只有活跃可用FD才会调用callback函数;即epoll最大优点就在于它只管你“活跃”连接,而跟连接总数无关,因此实际网络环境中,epoll效率就会远远高于selectpoll。...下次调用epoll,会再次响应应用程序并通知此事件。 ET模式:当epoll检测到描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。

90020

socket网络编程(一)——初识socket

这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...3.4、accept()函数 TCP服务器端依次调用socket()、bind()、listen()之后,就会监听指定socket地址了。...read()/write()recv()/send这两组函数,当然其他也是可以。...write函数将buf中nbytes字节内容写入文件描述符fd。成功返回写字节数,失败返回-1,并设置errno变量。 在网络程序中,当我们向套接字文件描述符写时有两种可能。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

21410

谈谈SOCKET

2.如何使用socket ? 先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...如果错误为EINTR说明读是由中断引起,如果是ECONNREST表示网络连接出了问题。 write函数将buf中nbytes字节内容写入文件描述符fd.成功返回写字节 数。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

66720

socket原理讲解_电感器作用及原理

TCP/IP协议存在于OS中,网络服务通过OS提供,OS中增加支持TCP/IP系统调用——Berkeley套接字,如Socket,Connect,SendRecv等 UDP(User Data...当进程打开一个文件,系统把一个指向此文件内部数据结构指针写入文件描述符表,并把该表索引值返回给调用者 。应用程序只需记住这个描述符,并在以后操作该文件使用它。...应用程序创建套接字后该套接字可以使用之前,必须调用其他过程来填充这些字段。 3、文件描述符文件指针区别: 文件描述符linux系统中打开文件就会获得文件描述符,它是个很小正整数。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv

29210

Linux应用开发【第六章】网络编程应用开发

函数执行成功返回文件描述符,失败返回-1,看errno可知道出错详细情况。...backlog设置请求排队最大长度。当有多个客户端程序和服务端相连使用这个表示可以介绍排队长度。 listen函数将bind文件描述符变为监听套接字,返回情况bind一样。...sockfd是listen后文件描述符。 addr,addrlen是用来给客户端程序填写,服务器端只要传递指针就可以了, bind,listenaccept是服务器端函数。...accept调用时,服务器端程序会一直阻塞到有一个客户程序发出了连接。 accept成功返回最后服务器端文件描述符,这个时候服务器端可以向该描述符写信息了,失败返回-1 。...addrlen是serv_addr长度 connect函数客户端用来同服务端连接.成功返回0,sockfd是同服务端通讯文件描述符,失败返回-1。

1.3K31

温故Linux后端编程(五):SOCKET网络编程

或UDP来传输,用IPV4地址 AF_INET6:上面的差不多,这个是IPV6 AF_UNIX:本地协议,用在UnixLinux系统上,一般都是服务端客户端同一台机器上使用。...(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger)); ---- recv&send函数 socket函数创建一个文件描述符fd...运行过程 同步Socketsend函数执行流程,当调用函数send先比较待发送数据长度len套接字s发送缓冲长度(因为待发送数据是要copy到套接字s发送缓冲区,注意并不是send...同步Socketrecv函数执行流程:当应用程序调用recv函数recv先等待s发送缓冲中数据被协议传送完毕,(发送先) 如果协议传送s发送缓冲中数据出现网络错误,那么recv函数返回...收发数据频繁,由于tcp传输消息无边界,会导致客户端/服务器端不知道接收到消息到底是第几条消息,因此,会导致类似一次性接收几条消息情况,从而乱码。

76520

python之socket编程

Python 官方关于 Socket 函数请看 http://docs.python.org/library/socket.html socketfile区别:   1、file模块是针对某个指定文件进行...服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。...通常是一个元组(ipaddr,port) sk.fileno()   套接字文件描述符 以下是例子: 例子1: 简单服务器客户端之间进行通讯 service端: """ file: service.py...socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 6666)) # 服务器客户端不同系统或不同主机下使用...ip端口,首先要查看服务器所在系统网卡ip # s.connect(('127.0.0.1', 6666)) #服务器客户端都在一个系统下使用ip端口

54410

Socket原理

socket一词起源 组网领域首次使用1970年2月12日发布文献IETF RFC33中发现,撰写者为Stephen Carr、Steve CrockerVint Cerf。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...如果错误为EINTR说明读是由中断引起,如果是ECONNREST表示网络连接出了问题。 write函数将buf中nbytes字节内容写入文件描述符fd.成功返回写字节 数。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

46320

通信原理一个月能学会吗_通信原理第六版

socket一词起源 组网领域首次使用1970年2月12日发布文献IETF RFC33中发现,撰写者为Stephen Carr、Steve CrockerVint Cerf。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...如果错误为EINTR说明读是由中断引起,如果是ECONNREST表示网络连接出了问题。 write函数将buf中nbytes字节内容写入文件描述符fd.成功返回写字节 数。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

26980

socket通讯原理及例程(一看就懂)

socket一词起源 组网领域首次使用1970年2月12日发布文献IETF RFC33中发现,撰写者为Stephen Carr、Steve CrockerVint Cerf。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...如果错误为EINTR说明读是由中断引起,如果是ECONNREST表示网络连接出了问题。 write函数将buf中nbytes字节内容写入文件描述符fd.成功返回写字节 数。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

97630

Socket通信原理

socket一词起源 组网领域首次使用1970年2月12日发布文献IETF RFC33中发现,撰写者为Stephen Carr、Steve CrockerVint Cerf。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...如果错误为EINTR说明读是由中断引起,如果是ECONNREST表示网络连接出了问题。 write函数将buf中nbytes字节内容写入文件描述符fd.成功返回写字节 数。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

81110

socket接口api深度探究

SOCK_NONBLOCK:为新打开文件描述符设置O_NONBLOCK标志位,如果是accept需要和fcntl()搭配使用,这样设置效果accept4是一样,区别就是用accept的话需要多调用个...SOCK_CLOEXEC: 为新打开文件描述符设置FD_CLOEXEC标志位,该标志位作用是进程使用fork()加上execve()时候自动关闭打开文件描述符。...多线程环境中,如果使用fcntl()会多出一步操作,这样就可能形成竞争。而使用accept4()就可以直接在打开文件描述符上设置,可以消除竞争问题。...(原则上该竞争在那些新建文件描述符调用中都存在,所以很多linux系统调用都做了类似的处理) image.png 1.3.6 send/write函数 功能:发送数据 实现:验证socketconnection...读/写是“通用”文件描述符函数,而recv / send稍微更专门化(例如,您可以设置一个标志忽略SIGPIPE,或者发送带外消息…)。

2.7K370

套接字 socket tcp 连接过程

可以看出,连接请求方(如客户端)才会使用 connect() 函数,当然,发起 connect() 之前,连接发起方也需要生成一个 sockfd,且使用很可能是绑定了随机端口套接字。...既然 connect() 函数是向某个套接字发起连接,自然使用 connect() 函数需要带上连接目的地,即目标地址目标端口,这正是服务端监听套接字上绑定地址端口。...这两个函数都涉及到了 socket buffer,但是调用 send() 或 recv() ,复制源 buffer 中是否有数据、复制目标 buffer 中是否已满而导致不可写是需要考虑问题。...当然,可以将套接字设置为非阻塞 IO 模型,这时 buffer 不满足条件时调用 send()/recv() 函数调用函数进程/线程将返回错误状态信息 EWOULDBLOCK 或 EAGAIN ;...buffer中是否有数据、是否已满而导致不可写,其实可以使用 select()/poll()/epoll 去监控对应文件描述符(对应socket buffer则监控该socket描述符),当满足条件

2.3K10

【网络编程系列】二:socket通信原理及实践

socket一词起源 组网领域首次使用1970年2月12日发布文献IETF RFC33中发现,撰写者为Stephen Carr、Steve CrockerVint Cerf。...这就是为什么通常服务器端listen之前会调用bind(),而客户端就不会调用,而是connect()由系统随机生成一个。...如果错误为EINTR说明读是由中断引起,如果是ECONNREST表示网络连接出了问题。 write函数将buf中nbytes字节内容写入文件描述符fd.成功返回写字节数。...其它我就不一一介绍这几对I/O函数了,具体参见man文档或者baidu、Google,下面的例子中将使用send/recv。...3.6、close()函数 服务器与客户端建立连接之后,会进行一些读写操作,完成了读写操作就要关闭相应socket描述字,好比操作完打开文件调用fclose关闭打开文件

1.2K60

UDP&TCP Linux网络应用编程详解

一台计算机中,一个端口号一次只能分配给一个进程,也就是说,一台计算机中,端口号进程之间是一一对应关系。 所以,使用端口号网络地址组合可以唯一的确定整个网络中一个网络进程。...)、SOCK_RAW protocol:指定socket所使用传输协议编号,通常为0 返回值: 若成功,返回一个套接字描述符,否则返回-1; Socket就是一种文件描述符普通打开文件一样,...标识符,以后数据传输读取就要通过这个新socket编号来处理,原来参数中socket也可以继续使用,继续监听其它客户机连接请求; accept连接成功,参数addr所指结构体会填入所连接机器地址数据...开发板上运行服务器端代码,Ubuntu主机先启动tmux分屏,再分别运行客户端代码。 服务器端 ?...开发板上运行服务器端代码,Ubuntu主机先启动tmux分屏,再分别运行客户端代码。 服务器端 ? 客户机端 ?

5.7K20

网络编程之socket运用

图3        先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。...客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端客户端读取数据,最后关闭连接,一次交互结束 服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen...() connect()函数扩展版本,出错返回出错码,而不是抛出异常 公共用途套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP...数据(send待发送数据量大于己端缓存区剩余空间,数据丢失,不会发完) s.sendall() 发送完整TCP数据(本质就是循环调用send,sendall待发送数据量大于己端缓存区剩余空间...() 得到阻塞套接字操作超时时间 面向文件套接字函数 s.fileno() 套接字文件描述符 s.makefile() 创建一个与该套接字相关文件

82030
领券