`
grzrt
  • 浏览: 188086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

socket中accept()函数的理解

 
阅读更多

如果客户端有连接请求,必须使用下述函数来接受客户端的请求。

SOCKET accept(

       SOCKET               s,

       struct sockaddr FAR  *addr,

       int FAR          *addrlen

);

    addr用于存放客户端的地址,addrlen在调用函数时被设置为addr指向区域的长度,在函数调用结束后被设置为实际地址信息的长度。本函数会阻塞等待知道有客户端请求到达。

  返回值是一个新的套接字描述符,它代表的是和客户端的新的连接,可以把它理解成是一个客户端的socket,这个socket包含的是客户端的ipport信息 。(当然这个new_socket会从sockfd中继承 服务器的ipport信息,两种都有了),而参数中的SOCKET   s包含的是服务器的ipport信息

  于是之后的send和recv函数中的fd都是指这个 new_fd,也就是
  int send(int new_fd, const void *msg, int len, int flags); 
  int recv(int new_fd, void *buf, int len, unsigned int flags);

  即参数其实都是目标fd(就是记录了客户端的信息 ),说明服务器是从客户端接收或者发送给客户端的。这个和文件的操作FILE *fp =fopen();   fwrite(fp,xx,xx,xx);是差不多的,这里的fp代表的也是目标即目标文件名。

  这样,客户端的 connect函数 ,
  int connect (int sockfd, struct sockaddr *serv_addr, int addrlen);
  这里的sockfd 就把客户端的ip和port  ,服务器的ip和port信息都有了。所以之后的 send(),recv()都有信息了。

   ----------------------------------------------------------------------------------------------------------------------------------------------------------

  accept()函数 
  准备好了,系统调用   accept()   会有点古怪的地方的!你可以想象发生   这样的事情:有人从很远的地方通过一个你在侦听   (listen())   的端口连接   (connect())   到你的机器。它的连接将加入到等待接受   (accept())   的队列   中。你调用   accept()   告诉它你有空闲的连接。它将返回一个新的套接字文   件描述符!这样你就有两个套接字了,原来的一个还在侦听你的那个端口,   新的在准备发送   (send())   和接收   (   recv())   数据。这就是这个过程! 

分享到:
评论

相关推荐

    关于SOCKET中的accept函数的解释

    ### 关于SOCKET中的accept函数详解 #### 一、引言 在计算机网络通信中,套接字(Socket)作为一种重要的通信方式,被广泛应用于不同系统间的通信过程。特别是在服务器编程中,如何处理客户端的连接请求是核心问题之...

    网络编程socket之accept函数

    ### 网络编程Socket之accept函数详解 #### 一、引言 在网络编程中,服务器端接收客户端连接请求是一个非常关键的过程。这一过程通常由`accept`函数完成。`accept`函数的主要职责是从内核中取出已建立的客户端连接,...

    Socket编程函数说明

    该函数的原型为:`newsock = accept(socket, caddress, caddresslen)`。 * `socket`:是所用套接字的描述符。 * `caddress`:是一个 sockaddr_in 结构类型的地址,填入已建立连接的客户地址。 * `caddresslen`:是...

    Socket编程所有函数说明[详细]

    ### Socket编程核心函数详解 #### 1. accept(接受socket连接) ...在实际应用中,还需结合`socket()`, `listen()`, `send()`, `recv()`等其他函数,以及理解socket的不同类型和协议族,才能构建完整的网络通信系统。

    socket函数使用说明

    总的来说,`socket函数说明.docx`文档涵盖了Socket编程中的关键函数,对于理解Socket编程原理和实现提供了很大的帮助。无论是新手还是经验丰富的开发者,都能从中受益,更好地理解和应用Socket函数,构建可靠的网络...

    Socket常用函数大全

    以下是对给定文件中提及的Socket常用函数的详细解析,旨在帮助读者深入理解每个函数的功能与应用场景。 ### accept() `accept()`函数主要用于处理TCP服务器端的连接请求。当服务器通过`listen()`函数监听到客户端...

    简单的测试socket函数程序

    在标题中提到的“简单的测试socket函数程序”,我们通常会用到以下两个主要的socket函数: 1. `socket()`:这是创建一个新的socket的函数。它接受两个参数,一个是通信协议族(如AF_INET用于IPv4,AF_INET6用于IPv6...

    windows socket api函数大全

    1. **accept()**:用于接受来自客户端的连接请求,返回一个新的Socket,该Socket将用于与客户端进行数据通信。 2. **bind()**:将Socket绑定到特定的IP地址和端口号,以便监听来自网络的连接。 3. **closesocket()**...

    与socket有关的一些函数介绍

    本文将深入探讨几个与Socket相关的函数,帮助理解如何使用它们来构建网络应用。 1. socket()函数 socket()是创建Socket的入口点,它用于建立一个新的Socket描述符。在C语言中,其原型为: ```c int socket(int ...

    Socket函数参考

    `socket_accept()`函数在服务器端用于接受一个传入的连接请求。在非阻塞模式下,如果没有连接,它会立即返回false。当成功接受连接后,返回一个新的socket资源,可以用于与客户端进行数据交换。 以下是一个简单的...

    windows_socket_api_函数大全

    如果通过`WSACancelBlockingCall()`取消了一个非`accept()`或`select()`的阻塞调用,则之后只能调用`closesocket()`函数,因为取消操作会使Socket处于不确定状态。 #### 异步模式 - **异步模式**:调用函数时不会...

    有关socket编程的函数详解

    #### 六、accept函数 **函数原型:** ```c SOCKET accept(SOCKET s, struct sockaddr *addr, int *addrlen); ``` **参数说明:** - `s`:监听的套接字。 - `addr`:指向`sockaddr`结构的指针,用于存储客户端的...

    Api函数编写的Socket客户端,有注释

    在本项目中,API函数如`WSAStartup`、`WSACleanup`、`socket`、`bind`、`listen`、`accept`、`connect`、`send`和`recv`等被用来创建和管理Socket连接。 3. **TCP/IP协议**:TCP(传输控制协议)是一种面向连接的、...

    linux下socket和fork结合使用的例子

    子进程中,我们可以使用`client_socket`与客户端进行数据交换,例如通过`read()`和`write()`函数。完成后,记得关闭套接字,并在适当的时候结束子进程。 总结来说,`socket`和`fork`在Linux下的结合使用,允许...

    Matlab环境下Socket网络功能的实现

    在Matlab中,我们可以使用`socket`函数创建Socket对象,然后利用这个对象进行连接、发送和接收数据。 1. **创建Socket对象**: 在Matlab中,使用`socket`函数创建Socket对象,例如: ```matlab s = socket('inet...

    Linux Socket函数调用的基础实例

    在IT领域,Linux Socket编程是...通过这个实例,你可以学习到如何在Linux环境中使用C语言进行Socket编程,理解Server和Client之间的通信过程。在实际项目中,这些基础技能将为你构建更复杂的网络应用打下坚实的基础。

    用API函数实现SOCKET通信

    在Delphi中,虽然有内置的 Indy 和 Synapse 等第三方组件库可以方便地进行SOCKET编程,但直接使用API函数可以让我们更深入地理解网络通信的底层机制。API函数包括`WSAStartup`、`socket`、`bind`、`listen`、`accept...

    php中关于socket的系列函数总结

    1. socket_accept()函数:用于接受一个socket的连接请求。该函数通常在监听socket上调用,它返回一个新的socket资源,代表与客户端的连接。 2. socket_bind()函数:允许将一个socket绑定到指定的IP地址和端口上。这...

    linux_Socket_函数集(API索引)

    `accept()`、`bind()`、`connect()`这三个函数在Socket编程中扮演着至关重要的角色,它们分别负责接受连接、绑定地址和发起连接。理解这些函数的工作原理和使用方法是掌握Socket编程的关键。通过合理运用这些函数,...

    linux下socket模板函数发送与接受

    本教程将深入探讨Linux下的Socket模板函数,以帮助你理解如何有效地进行发送和接收操作。 一、Socket基础概念 Socket可以视为进程间通信的一种方式,特别是在网络环境下。在Linux中,我们通常使用`socket()`函数来...

Global site tag (gtag.js) - Google Analytics