计算机网络网络应用之Socket编程应用-Socket API函数(WinSock为例)3

系列文章目录

第二章计算机网络网络应用之Socket编程应用-Socket API函数(WinSock为例)


三、Socket编程-Socket API函数(WinSock为例)

没有WSA开头的函数是通用可以window linux unix 使用
在这里插入图片描述调用WSAStartup函数,初始化动态连接库
调用WSACLeanup函数,清除动态连接库

3.1WSAStartup函数

在这里插入图片描述

3.2WSACLeanup函数

在这里插入图片描述

3.3socket函数

在这里插入图片描述套接字描述符对应该t箭头指向的那个socket

3.4Socket面向TCP/IP的服务类型

对于SOCK_RAW的创建需要root权限
TCP和UDP协议给应用层提供的服务的特点
可靠:数据不遗漏(数据一致)在这里插入图片描述点对点:一个TCP连接只能连接两者,不能连接第三方

3.5Closesocket函数

在linux unix 是Close
当多个应用进程共享一个Socket时,socket的数据结构会有个量存Socket引用次数,一个进程调用Closesocket,首先是在这个进程的套接字描述列表里面,把套接字描述符清除掉,不一定关闭这个描述符列表对应的套接字数据结构,释放它所占用的空间。
如果减到0,意味着没有其他进程在共享,才关闭。

在这里插入图片描述
一个进程里的线程Closesocket,无论是否套接字是否物理上释放掉。其他线程都无法访问

3.6bind函数

在这里插入图片描述
场景:
主机有两个网络接口,比如两个网卡,分别连接在两个网络上(路由器)这两个网络接口有IP地址1和2
在该主机运行一个服务器
该服务器绑定Ip地址?绑定1,从ip2来的请求无法提供服务。
服务器:所以在设置Bind函数绑定端点地址时,设置端口号(数值端口号或者其他端口号)后Ip地址要设置地址通配符-----意味着在该服务器运行的主机上任意一个有效地址都行

在这里插入图片描述

3.7listen函数

队列缓存是先进先出的
在这里插入图片描述

3.8connect函数

在这里插入图片描述
UDP:UDP协议是无连接的,不会因为用了套接字API的connect函数在udp发生连接,作为UDP调用了,只是指定了端点地址
TCP调用connect成功函数返回,客户与服务器连接成功。
UDP调用connect成功函数返回,客户与服务器不一定连接成功,因为没有连接。
在这里插入图片描述

3.9accept

在这里插入图片描述在这里插入图片描述消息到应用进程后
为客户提供服务的也是新的套接字
在这里插入图片描述
由于TCP连接是点对点的,如果不创建新的套接字,则服务器只能为一个客户端提供服务,不能实现多线程多进程并发的TCP服务器

3.9send,sento函数

发送数据的函数
在这里插入图片描述send没有指定数据的端点地址,所以已经有连接了

3.10recv,recvfrom函数

接受数据的函数

在这里插入图片描述

3.11setsockopt,getsockopt函数

套接字参数的设置
套接字选定参数的读取
在这里插入图片描述

四、Socket API函数小结

除了3.1和3.2是在windows下使用,其他函数在linux unix windows都能用
在这里插入图片描述在这里插入图片描述

五、关于网络字节顺序

在osi参考模型中表示层完成数据的转换,当客户端和服务器的系统数据表示不一样的时候,转换
在5层模型时,没有表示层
这件事由这协议做
当我们为套接字API指定某些参数值,给本地用户看,要网络转换本地。网络同理
在这里插入图片描述

六、网络应用的Socket API(TCP)调用基本流程

在这里插入图片描述

无客户发送连接请求会阻塞,如果有客户来接受请求,然后再创建新的套接字。如果没有,则阻塞(等待)
客户端不用调用80绑定端点地址,操作系统默认帮忙填写了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值