socket传输过程及socket()函数详解

目录

1.socket传输过程图解

2. 创建套接字-socket()函数

2.1socket()函数

2.2参数1:int domain

2.3参数2:int type

2.3.1面向连接的套接字(SOCK_STREAM)

2.3.2面向消息的套接字(SOCK_DGRAM)

2.3.3对于数据边界的说明

2.4参数3:int protocol


1.socket传输过程图解

 

 

以上图片来源于百度搜索。 

2. 创建套接字-socket()函数

2.1socket()函数

#include<sys/socket.h>
int socket(int domain, int type, int protocol);
//成功时返回文件描述符,失败时返回-1

2.2参数1:int domain

        domain:套接字中使用的协议(Protocol Family)信息

通过domain传递套接字中使用的协议分类信息

       头文件sys/socket.h中声明的协议族

名称协议族
PF_INETIPv4互联网协议族
PF_INET6IPv6互联网协议族
PF_LOCAL本地通信的UNIX协议族
PF_PACKET底层套接字的协议族
PF_IPXIPX Novell协议族
 

2.3参数2:int type

        type:套接字数据传输类型信息

通过type传递套接字中使用的数据传输方式,下面为两种具有代表性的数据传输方式:

2.3.1面向连接的套接字(SOCK_STREAM)

        特点:(TCP)

                (1)传输过程中数据不会消失。

                (2)按序传输数据。

                (3)传输的数据不存在数据边界。

                (4)可靠的,基于字节的面向连接的。

2.3.2面向消息的套接字(SOCK_DGRAM)

        特点:(UDP)

                (1)强调快速传输而非传输顺序。

                (2)传输的数据可能丢失也可能损毁。

                (3)传输的数据有数据边界。

                (4)限制每次传输的数据大小。

                (5)不可靠的,以数据高速传输为目的的。

注:面向消息的套接字不存在连接的概念。

2.3.3对于数据边界的说明

        在可靠连接中,无论数据有多大只要不超过接收方的数组容量,就不会出现多次调用read()之类的函数,所以在面向连接的套接字中,数据传输时调用对应函数的次数并没有太大的意义,这即是不存在数据边界。但是在面向消息的连接中,因为强调快速传输,而非按序传输,所以当发生较大的数据时,可能会分成几份进行数据传输,此时接收端必须产生相应的接受次数,即数据的传输次数和接收次数相同,便是存在数据传输边界。

2.4参数3:int protocol

        protocol:最终决定计算机间通信使用的协议信息

正常情况下该参数为0,前提是参数1和参数2能确定唯一的协议信息。

但是如果遇到“同一协议族中存在多个数据传输方式相同的协议”时,只使用参数1和参数2无法确定具体使用的协议,所以需要参数3:protocol来最终确定协议。

例如:

int tcp_socket=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);

PF_INET:IPv4协议族

SOCK_STREAM:面向连接

满足上面两个条件的只有IPPROTO_TCP协议,所以这里可以将第三个参数设置为0。

如果是IPv4、面向消息,也只有IPPROTO_UDP协议。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Socket是一种进程间通信的方式,它可以用于实现网络编程。在Python中,我们可以使用TCP Socket进行网络编程。TCP是一种面向连接的传输层协议,它保证了数据的可靠传输。 在Python中,我们可以使用socket模块来创建和操作Socket。可以使用ServerSocket类的构造函数来创建Server Socket,并且可以指定端口号、连接队列大小以及绑定的IP地址。 在建立Socket连接时,如果远程主机不可访问,会出现阻塞的情况。为了避免出现长时间的阻塞,可以设置超时时间。可以使用setSoTimeout方法设置Socket的超时时间,单位为毫秒。 通过使用socket模块和TCP Socket,我们可以实现客户端和服务器之间的通信。客户端可以使用Socket连接到服务器,并发送数据。服务器可以监听指定的端口,并接受客户端的连接请求,并处理客户端发送的数据。这样就实现了基本的Socket网络编程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解Python Socket网络编程](https://download.csdn.net/download/weixin_38715831/13776658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Socket网络编程详解](https://blog.csdn.net/RuiKe1400360107/article/details/86605753)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值