connect()bind()系统调用都将套接字文件描述符与地址(通常是ip/端口组合)关联起来.他们的原型如下:-

int connect(int sockfd, const struct sockaddr *addr,
               socklen_t addrlen);

int bind(int sockfd, const struct sockaddr *addr,
            socklen_t addrlen);

What is the exact difference between 2 calls? When should one use connect() 和 when bind()?

Specifically, in some sample server client codes, found that client is using connect() 和 server is using the bind() call. Reason was not fully clear to me.

推荐答案

为了更好地理解,让我们找出绑定和连接的确切位置,

根据苏拉夫澄清的两个呼叫的定位,

bind()将套接字与其本地地址相关联[这就是服务器端绑定的原因,以便客户端可以使用该地址连接到服务器.] connect()用于连接到远程的[服务器]地址,所以客户端使用connect[Read As:connect to server].

由于特定的角色和相应的实现,我们不能互换使用它们(即使在同一台机器上有客户机/服务器).

我将进一步建议将这些调用与TCP/IP握手关联起来.

在此处输入图像描述

那么,谁将把SYN发送到这里,它将是connect().而bind()用于定义通信端点.

希望这有帮助!!

C++相关问答推荐

Linux/C:复制修剪了最后一个填零孔的文件

海湾合作委员会是否保证大小匹配的访问?

C限制限定符是否可以通过指针传递?

找出文件是否包含给定的文件签名

VS代码C/C++扩展intellisense无法检测环境特定函数'

为什么GCC C23中的关键字FALSE不是整数常量表达式?

如何创建一个C程序来存储5种动物的名字,并在用户 Select 其中任何一种动物时打印内存地址?

对于C中给定数组中的每个查询,如何正确编码以输出给定索引范围(1到N)中所有数字的总和?

解决S随机内存分配问题,实现跨进程高效数据共享

GTK3按钮信号错误

关于scanf()和空格的问题

为 struct 中的数组动态分配内存时出错

在C中包装两个数组?

C代码可以在在线编译器上运行,但不能在Leetcode上运行

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

pthread_create的用法

为什么GCC-O1优化破解了这个代码,为了一个GameBoy高级只读存储器而修改了VRAM的循环?

为什么我无法访问C语言中的文件

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

是否可以在多字 C 类型中的任何位置混合存储和类型限定符?