如果客户端有连接请求,必须使用下述函数来接受客户端的请求。
SOCKET accept(
SOCKET s,
struct sockaddr FAR *addr,
int FAR *addrlen
);
addr用于存放客户端的地址,addrlen在调用函数时被设置为addr指向区域的长度,在函数调用结束后被设置为实际地址信息的长度。本函数会阻塞等待知道有客户端请求到达。
返回值是一个新的套接字描述符,它代表的是和客户端的新的连接,可以把它理解成是一个客户端的socket,这个socket包含的是客户端的ip和port信息 。(当然这个new_socket会从sockfd中继承 服务器的ip和port信息,两种都有了),而参数中的SOCKET s包含的是服务器的ip和port信息 。
于是之后的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)作为一种重要的通信方式,被广泛应用于不同系统间的通信过程。特别是在服务器编程中,如何处理客户端的连接请求是核心问题之...
### 网络编程Socket之accept函数详解 #### 一、引言 在网络编程中,服务器端接收客户端连接请求是一个非常关键的过程。这一过程通常由`accept`函数完成。`accept`函数的主要职责是从内核中取出已建立的客户端连接,...
该函数的原型为:`newsock = accept(socket, caddress, caddresslen)`。 * `socket`:是所用套接字的描述符。 * `caddress`:是一个 sockaddr_in 结构类型的地址,填入已建立连接的客户地址。 * `caddresslen`:是...
### Socket编程核心函数详解 #### 1. accept(接受socket连接) ...在实际应用中,还需结合`socket()`, `listen()`, `send()`, `recv()`等其他函数,以及理解socket的不同类型和协议族,才能构建完整的网络通信系统。
总的来说,`socket函数说明.docx`文档涵盖了Socket编程中的关键函数,对于理解Socket编程原理和实现提供了很大的帮助。无论是新手还是经验丰富的开发者,都能从中受益,更好地理解和应用Socket函数,构建可靠的网络...
以下是对给定文件中提及的Socket常用函数的详细解析,旨在帮助读者深入理解每个函数的功能与应用场景。 ### accept() `accept()`函数主要用于处理TCP服务器端的连接请求。当服务器通过`listen()`函数监听到客户端...
在标题中提到的“简单的测试socket函数程序”,我们通常会用到以下两个主要的socket函数: 1. `socket()`:这是创建一个新的socket的函数。它接受两个参数,一个是通信协议族(如AF_INET用于IPv4,AF_INET6用于IPv6...
1. **accept()**:用于接受来自客户端的连接请求,返回一个新的Socket,该Socket将用于与客户端进行数据通信。 2. **bind()**:将Socket绑定到特定的IP地址和端口号,以便监听来自网络的连接。 3. **closesocket()**...
本文将深入探讨几个与Socket相关的函数,帮助理解如何使用它们来构建网络应用。 1. socket()函数 socket()是创建Socket的入口点,它用于建立一个新的Socket描述符。在C语言中,其原型为: ```c int socket(int ...
`socket_accept()`函数在服务器端用于接受一个传入的连接请求。在非阻塞模式下,如果没有连接,它会立即返回false。当成功接受连接后,返回一个新的socket资源,可以用于与客户端进行数据交换。 以下是一个简单的...
如果通过`WSACancelBlockingCall()`取消了一个非`accept()`或`select()`的阻塞调用,则之后只能调用`closesocket()`函数,因为取消操作会使Socket处于不确定状态。 #### 异步模式 - **异步模式**:调用函数时不会...
#### 六、accept函数 **函数原型:** ```c SOCKET accept(SOCKET s, struct sockaddr *addr, int *addrlen); ``` **参数说明:** - `s`:监听的套接字。 - `addr`:指向`sockaddr`结构的指针,用于存储客户端的...
在本项目中,API函数如`WSAStartup`、`WSACleanup`、`socket`、`bind`、`listen`、`accept`、`connect`、`send`和`recv`等被用来创建和管理Socket连接。 3. **TCP/IP协议**:TCP(传输控制协议)是一种面向连接的、...
子进程中,我们可以使用`client_socket`与客户端进行数据交换,例如通过`read()`和`write()`函数。完成后,记得关闭套接字,并在适当的时候结束子进程。 总结来说,`socket`和`fork`在Linux下的结合使用,允许...
在Matlab中,我们可以使用`socket`函数创建Socket对象,然后利用这个对象进行连接、发送和接收数据。 1. **创建Socket对象**: 在Matlab中,使用`socket`函数创建Socket对象,例如: ```matlab s = socket('inet...
在IT领域,Linux Socket编程是...通过这个实例,你可以学习到如何在Linux环境中使用C语言进行Socket编程,理解Server和Client之间的通信过程。在实际项目中,这些基础技能将为你构建更复杂的网络应用打下坚实的基础。
在Delphi中,虽然有内置的 Indy 和 Synapse 等第三方组件库可以方便地进行SOCKET编程,但直接使用API函数可以让我们更深入地理解网络通信的底层机制。API函数包括`WSAStartup`、`socket`、`bind`、`listen`、`accept...
1. socket_accept()函数:用于接受一个socket的连接请求。该函数通常在监听socket上调用,它返回一个新的socket资源,代表与客户端的连接。 2. socket_bind()函数:允许将一个socket绑定到指定的IP地址和端口上。这...
`accept()`、`bind()`、`connect()`这三个函数在Socket编程中扮演着至关重要的角色,它们分别负责接受连接、绑定地址和发起连接。理解这些函数的工作原理和使用方法是掌握Socket编程的关键。通过合理运用这些函数,...
本教程将深入探讨Linux下的Socket模板函数,以帮助你理解如何有效地进行发送和接收操作。 一、Socket基础概念 Socket可以视为进程间通信的一种方式,特别是在网络环境下。在Linux中,我们通常使用`socket()`函数来...