socket - 简述
来源:互联网 发布:java开源微信商城 编辑:程序博客网 时间:2024/05/17 01:28
套接字
——简述
1、套接字是什么
1.1、它不是一个什么东西,它是指一种机制,用在位于不同计算机的不同进程之间进行通信的机制(在任何一个系统中,机制都起着基础性的、根本的作用。), 简单来说就是网络进程间通信(network IPC) 。套接字的英文是socket,而socket 的英文原意就是“孔”或“插座”,这里取与”插座“相近的意思。套接字为什么叫做套接字,把socket翻译命名为套接字,闪耀着智慧的光芒,大家自己琢磨。
1.2、套接字在计算机系统中的位置:
每台计算机都有对应的网卡和网卡驱动,在这之上,可以有多个套接字。也就是说,套接字的运作基于网卡驱动和网卡,被传输的数据先经过本机的网卡驱动(含各种网络协议) 、网卡、有线/无线网路,然后是对方机器的网卡、网卡驱动,再到对应的套接字。
2、一些主要接口:
2.1、UNIX like 系统下的几个主要接口:
socket()
创建套接字
bind()
将套接字和网络地址联系在一起
connect()
将套接字和远程网络地址连在一起
listen()
侦听传入的连接意图
accept()
接受传入的连接意图
send()
发送数据
recv()
接收数据
shutdown()
禁用读端/写端
close()
关闭套接字
2.2、函数原型:
①int socket(int domain, int type, int protocol); 参数domain(域)确定通信的特性,参数type确定套接字的类型,进一步确定通信特性,参数protocol通常是零,表示按给定的域和套接字类型选择默认的协议。
②int bind(int sockfd, const struct sockaddr *addr, socklen_t len);
③int connect(int sockfd, const struct sockaddr *addr, socklen_t len); 参数中指定的地址为想与之通信的地。
④int listen(int sockfd, int backlog); backlog指明可以连接的最大请求数量。
⑤int accept(int sockfd, struct sockaddr *restrictt addr, socklen_t *restrict len); accept的返回值为套接字描述符,
⑥ssize_t send(int sockfd, const void *buf, size_t nbyts, int flags); send和write很像,flags标志可以改变处理传输数据的方式。如果send成功返回并不表示对方成功接收,只表示成功发送到网络。
⑦ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags); 跟send类似,flags可以指定如何接收数据。
⑧int shutdown(int sockfd, int how); how 是SHUT_RD则关闭读端,SHUT_WR则关闭写端。而同时禁止输入输出则传递实参SHUT_RDWR 。
⑨int close(int sockfd);
3、一般socket通信程序的流程
3.1、面向连接的套接字:
3.2、无连接套接字:
对于面向无连接的socket程序,没有client和server之分,两个对应的程序流程都是一样的。也就是先调用socket() 创建,调用bind() 绑定,然后就可以收发数据了。
4、另外一些套接字的特性
4.1、套接字接口能够同时向另外进程发送或从另外进程接收数据,依照套接字的类型而调用语义。共有四种套接字:①长度固定、有序、可靠的面向连接报文传递;②有序、可靠、双向的面向连接字节流;③长度固定的、无连接的不可靠报文传递;④IP协议的数据报接口。每一种类型都分别代表了一种不同类型的通信服务。在另外一些平台只有3种:①流套接字,②数据报套接字,③原始套接字。
4.2、套接字描述符在UNIX系统中是用文件描述符来实现的。事实上,许多处理文件描述符的函数都可以处理套接字描述符。
4.3、带外数据(out-of-band data)是一些通信协议所支持的可选特征,允许更高优先级的数据比普通数据优先传输。可以在发送函数的指定标志MSG__OOB实现。TCP支持而UDP不支持。
4.4、非阻塞特性。通常,recv函数没有数据可用时会阻塞等待,当套接字输出队列没有足够的空间来发送消息时函数send会阻塞。但在非阻塞模式,这些情况下,函数不会阻塞而是失败。
2012-10-05
by Jack
- socket简述
- socket - 简述
- Socket.IO简述
- python socket简述
- windows上Socket编程简述
- Socket编程实践(1) --TCP/IP简述
- Socket编程实践(1) --TCP/IP简述
- Socket编程实践(1) --TCP/IP简述
- Loadrunner编写socket性能测试脚本简述
- Http,Socket,TCP/IP 协议简述
- socket与各层协议简述
- socket编程各步骤作用简述之python版
- socket编程各步骤作用简述之python版
- TCP,IP,HTTP,SOCKET简述区别和联系
- 简述Socket,IP,TCP三次握手,HTTP协议
- TCP/IP、UDP、HTTP、socket内与外简述
- 简述Socket,IP,TCP三次握手,HTTP协议(有助于理解、记忆和学习)
- 简述Socket,IP,TCP三次握手,HTTP协议(有助于理解、记忆和学习)
- zoj3408-Gao-题解
- 猫捉老鼠问题系列(二)
- BufferedReader使用技巧转自freesky_lwj的博客
- 全世界最伤心的人 - 歌词
- CString 使用详解
- socket - 简述
- 英语练习 55 I like bright colors
- HDU-1166 敌兵布阵 线段树|树状数组
- 运行eclipse报JVM的错 解决方案
- 16进制的简单运算
- fodera linux view windows txt type files
- android gps经纬度实时更新,获取卫星数量
- poj 3528 & poj 2974 Ultimate Weapon(3D凸包求表面积)
- 安装openstack 遇到这样两个问题