socket流程与函数

 网络通信基础-A
一.TCP/IP协议
IP: 网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储,同时为ICMP,TCP,UDP提供分组发送服务。
    用户进程通常不需要涉及这一层。
ARP: 地址解析协议(Address Resolution Protocol) 此协议将网络地址映射到硬件地址。
RARP:反向地址解析协议(Reverse Address Resolution Protocol) 此协议将硬件地址映射到网络地址
ICMP:网间报文控制协议(Internet Control Message Protocol) 此协议处理信关和主机的差错和传送控制。
TCP: 传送控制协议(Transmission Control Protocol) 这是一种提供给用户进程的可靠的全双工字节流面向连接的协议。
UDP: 用户数据报协议(User Datagram Protocol) 这是提供给用户进程的无连接协议,用于传送数据而不执行正确性检查。
FTP: 文件传输协议(File Transfer Protocol) 允许用户以文件操作的方式(文件的增、删、改、查、传送等)与另一主机通信。
SMTP: 简单邮件传送协议(Simple Mail Transfer Protocol) SMTP协议为系统之间传送电子邮件。

TELNET:终端协议(Telnet Terminal Procotol) 允许用户以虚终端方式访问远程主机
HTTP: 超文本传输协议(Hypertext Transfer Procotol)
TFTP:简单文件传输协议(Trivial File Transfer Protocol)

二.客户机/服务器模式
在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。
该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。
客户机/服务器模式在操作过程中采取的是主动请示方式:

服务器:
1、打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求。
2、等待客户请求到达该端口。
3、接收到重复服务请求,处理该请求并发送应答信号。
4、返回第二步,等待另一客户请求
5、关闭服务器。

客户方:
1、打开一通信通道,并连接到服务器所在主机的特定端口。
2、向服务器发送服务请求报文,等待并接收应答;继续提出请求……
3、请求结束后关闭通信通道并终止。

三.SOCKET C/S模型
客户机/服务器典型过程
2.1 面向连接的套接字的系统调用
服务方:socket(s)->bind()->listen()->[accept()->recv()/send()->closesocket(ns)]->cosesocket(s)
客户方:socket()->connect()->recv()/send()->closesocket()
2.2 无连接协议的套接字调用
服务方:socket()->bind()->recv()/send()->colsesocket()
客户方:socket()->bind()->recv()/send()->colsesocket()

四.套接字函数
1、创建套接字——socket()
功能:使用前创建一个新的套接字
格式:SOCKET PASCAL FAR socket(int af,int type,int procotol);
参数:af: 通信发生的区域
type: 要建立的套接字类型
procotol: 使用的特定协议

2、指定本地地址——bind()
功能:将套接字地址与所创建的套接字号联系起来。
格式:int PASCAL FAR bind(SOCKET s,const struct sockaddr FAR * name,int namelen);
参数:s: 是由socket()调用返回的并且未作连接的套接字描述符(套接字号)。
其它:没有错误,bind()返回0,否则SOCKET_ERROR
地址结构说明:
struct sockaddr_in{
short sin_family;//AF_INET
u_short sin_port;//16位端口号,网络字节顺序
struct in_addr sin_addr;//32位IP地址,网络字节顺序
char sin_zero[8];//保留
}

3、建立套接字连接——connect()和accept()
功能:共同完成连接工作
格式:int PASCAL FAR connect(SOCKET s,const struct sockaddr FAR * name,int namelen);
SOCKET PASCAL FAR accept(SOCKET s,struct sockaddr FAR * name,int FAR * addrlen);

4、监听连接——listen()
功能:用于面向连接服务器,表明它愿意接收连接。
格式:int PASCAL FAR listen(SOCKET s, int backlog);

5、数据传输——send()与recv()
功能:数据的发送与接收
格式:int PASCAL FAR send(SOCKET s,const char FAR * buf,int len,int flags);
int PASCAL FAR recv(SOCKET s,const char FAR * buf,int len,int flags);
参数:buf:指向存有传输数据的缓冲区的指针。

6、多路复用——select()
功能:用来检测一个或多个套接字状态。
格式:int PASCAL FAR select(int nfds,fd_set FAR * readfds,fd_set FAR * writefds,
fd_set FAR * exceptfds,const struct timeval FAR * timeout);
参数:readfds:指向要做读检测的指针
writefds:指向要做写检测的指针
exceptfds:指向要检测是否出错的指针
timeout:最大等待时间

7、关闭套接字——closesocket()
功能:关闭套接字s
格式:BOOL PASCAL FAR closesocket(SOCKET s);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值