2019-06-03

Socket APT
套接字为客户和服务提供应用进程间通信的抽象机制

一台主机在应用层会有多个进程,如何连接?
给套接字绑定端口
标售通信端点(对外):IP+端口、
操作系统/进程如何管理套接字(对内):套接字描述符(socket descriptior)

Socket APT函数(WinSock)

WSAStratup:
使用Socket的应用程序在使用Socket之前必须首先调用该函数
两个参数:
1.第一个参数知名程序请求使用的WinSock版本,其中高字节指明副版本,地位字节指明主版本
十六进制整数,如0x102表示2.1版

2.第二个参数返回实际的WinSock的版本信息
指向WSADATA结构的指针

SOCK_DGRAM报文套接字
SOCK_STREAM流式套接字
SOCK_RAW原始套接字(需要高级权限才能使用)

TCP:可靠,面向连接,字节流传输,点对点
UDP:不可靠,无连接 数据报传输

bind函数 :绑定套接字的本地端点地址
IP地址+端口号
参数:
套接字描述符(sd)
端点地址(localaddr)
结构sockaddr_in
客户端一般不需要绑定端口

服务端需要要绑定端口

Q:一个服务器主机可能有多个IP地址,从不同网络访问可能会产生问题,,如何解决?

服务器应该绑定地址通配符:INADDR_ANY,这样只要在主机上有效的IP地址都成立

listen函数 int listen(sd,queuesize);
作用:
使位于服务器端的流套接字处于监听状态
仅服务端调用
仅用于面向连接的流式套接字

queuesize:设置连接请求队列的大小(queuesize)

返回值:0成功,SOCKET_ERRPOR:失败

connect函数:
connect(sd,saddr,saddrlen)
客户端程序调用connect函数来使客户端套接字(sd)和特定的计算机的特定端口(saddr)的套接字进行连接
connect函数仅用于客户端
TCP/UDP:
TCP客户端:向指定的saddr发送请求,建立TCP连接
UDP客户端:仅指定服务器端点地址

accept函数:
newsock=accpet(sd,caddr,caddrlen);
服务器程序调用accept函数从处于监听状态的流套接字sd的客户端连接
请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来
和客户套接字创建连接通道
仅用于TCP套接字,仅用于服务器

真正为客户服务,连接的是新的套接字
为了实现并发的tcp服务器

send,sendto函数:用于发送数据
recv ,recvfrom:用于接受数据

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 引言和网络编程基础知识 1.1 分别简述OSI参考模型和TCP/IP模型,并阐述他们之间的对应关系 1.2...
    V0W阅读 10,780评论 0 9
  • 1 Socket API函数 WinSock的实现方式是利用Windows的动态链接库实现的,所以如果在Windo...
    Veahow阅读 6,148评论 0 0
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 8,685评论 0 6
  • 什么是Socket Socket(套接字)是介于应用层和传输层之间(图1)的应用程序编程接口。多数应用程序是由通信...
    晔兮如华阅读 5,692评论 1 1
  • 一、C/S结构:服务器 - 7*24小时提供服务;永久性访问地址/域名;利用大量服务器实现可扩展性客户机 - 与服...
    wing_yeah阅读 3,931评论 0 1