Linux 网络编程 入门-常用函数
网络连接无外乎服务器和客户端两方面的编程。
对于服务器大致的流程是:1---调用socket函数创建套接字
2---调用bind函数分配IP地址和端口号
3---调用listsen函数将套接字转为可接受请求状态
4---调用accept函数受理链接请求
以上四个函数的使用,需要包含头文件 --- #include <sys/socket.h>
完成以上四个步骤,一个完整的能够基础服务器就搭建好了,只需要等待客户端的链接,下面分析一下整个过程中用到的几个函数。
Int socket(int domain,int type,int protocol)
创建网络套接字,成功时返回文件描述符(一个int型的数),失败时返回-1。
什么是网络套接字?----这个不需要关心,其实就是一个打包好的结构。是网络上两个程序双向通讯连接的端点。
A network socket is an endpoint of an inter-process communication across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network sockets are Internet sockets.
参数说明:
domain ----协议族,套接字通信中协议的具体分类。主要用到的有以下几个:
PF_INET IPv4互联网协议族
PF_INET6 IPv6互联网协议族
PF_LOCAL 本地通信的UNIX协议族
PF_PACKET 底层套接字的协议族
PF_IPX IPX Novell协议族
type ----套接字类型常用参数有以下:
SOCK_STREAM 面向连接的套接字。可靠的,按序传递的,基于字节面向连接的套接字。特点:
1---传输过程中数据不会消失;(拥有独立的内部缓冲区)
2--按序传输数据;(拥有独立的内部缓冲区)
3--传输的数据不存在数据边界。(拥有缓冲区,数据可以一次读出也可以分多次读出)
SOCK_DGRAM 面向消息的套接字。不可靠的,不按序传递的,以字节高速传输的套接字特点:
1 ---强调快速传输而非传输顺序;
2---传输的数据可能丢失也可能损毁;
3---传输的数据有数据边界;
4---限制每次传输的数据大小。
protocol ---决定最终采用的协议。大部分情况传递0,除非同一协议族中存在多个数据传输方式相同的协议(有有待理解)
常用协议有IPPROTO_TCP、IPPROTO_UDP、IPPROTO_STCP、IPPROTO_TIPC等,分别对应TCP传输协议、UDP传输协议、STCP传输协议、TIPC传输协议。type和protocol不可以随意组合,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当第三个参数为0时,会自动选择第二个参数类型对应的默认协议。
Int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen);
绑定套接字,给我们创建的套接字分配IP地址和端口号。成功时返回0,失败时返回-1.
参数说明:
sockfd ---套接字描述符(创建套接字时有产生)
套接字的描述符,一般是定义一个int型的变量,然后作为这个参数,好处就是不要记复杂的数字,我们可以给他一个自己熟悉的名字,以后使用到这个套接字的时候更方便操作。
myaddr ---sockaddr结构体指针,其中包含了要绑定的地址和端口号。
struct sockaddr {
  unsigned short sa_family; /* address family, AF_xxx */
  char sa_data[14]; /* 14 bytes of protocol address */
 }; 
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
};
sin_port:存储端口号(使用网络字节顺序)
sin_addr:存储IP地址,使用in_addr这个数据结构
sin_zero:是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
union {
struct{ unsigned char s_b1,s_b2, s_b3,s_b4;} S_un_b;
struct{ unsigned short s_w1, s_w2;} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
Int listen(int sockfd, int backlog)
将套接字转化成可接受状态。可以接受来自客户端的信号
参数说明:
Int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen)
阻塞式等待链接,失败时返回-1.
参数说明: ---参考bind的说明,注意此处的addrlen是一个指针!!!!!!!!!!!!!!!!
Linux 网络编程 入门-常用函数的更多相关文章
- Linux网络编程入门 (转载)
		(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ... 
- 【转】Linux网络编程入门
		(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ... 
- 《转》Linux网络编程入门
		原地址:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html (一)Linux网络编程--网络知识介绍 Linux网络编程-- ... 
- Linux网络编程入门
		(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍客户端和服务端 网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户 ... 
- 【Linux 网络编程】常用TCP/IP网络编程函数
		(1)函数socket /**************************************************************** ** 功能:创建一个套接字用于通信 ** 参 ... 
- linux网络编程:splice函数和tee( )函数高效的零拷贝
		splice( )函数 在两个文件描述符之间移动数据,同sendfile( )函数一样,也是零拷贝. 函数原型: #include <fcntl.h> ssize_t splice(int ... 
- Linux网络编程2——系统函数
		socket信息数据结构 #include <netinet/in.h> struct sockaddr { unsigned short sa_family; /*地址族*/ ]; /* ... 
- linux网络编程涉及的函数
		常用的网络命令: netstat 命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息. netstat有许多的选项我们常用的选项是-an用来显示详细的网络状态.至于其它选项我们使用帮 ... 
- linux网络编程:select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
		从别人的博客中转载过来了这一篇文章,经过重新编辑排版之后展现于此,做一个知识点保存与学习. select函数用于在非阻塞中,当一个套接字或一组套接字有信号时通知你,系统提供select函数来实现多路复 ... 
随机推荐
- 8Linux磁盘划分、RAID
			磁盘划分fdisk 1.磁盘分区 fdisk 2.格式化 mkfs.ext4 mkfs.xfs 3.挂载 mount 路径 挂载路径 fdisk命令中的参数以及作用 参数 作用m 查看全部可用的参数n ... 
- Django return
			return HttpResponse("OK") 返回一个字符串 return redirect("/index/") 返回URL return render ... 
- PHP:自己写的mysql操作类
			a{ font-weight: bold; display: block; text-align: center; color: #5887bf; font-size: 22px; } .conten ... 
- 用原生js简单模仿angular的依赖注入
			大家都知道angular 依赖注入很神奇,跟我们平常写代码的风格思维差别很大,不过仔细分析确是一个很有意思的东西,依赖注入早期也叫依赖倒置,是java中有的.废话不多少直接上例子 本帖属于原创,转载请 ... 
- FI-盘盈盘亏借贷科目
			资产的盘盈盘亏一般分两步:第一步,批准前调整为账实相符:第二步,批准后结转处理.库存现金.存货.固定资产.工程物资的盘盈盘亏的账务处理见下图: 以上科目中可能并不完整,比如“原材料等科目”就可能包括“ ... 
- python3编码
			一.字符编码 1.什么实字符编码:将人识别的字符转换成计算机能识别的01,而转换的过程或者规则就是字符编码表. 而这种字符编码表表示了一种对应关系. 2.常用的字符编码表有:ascii.unicode ... 
- 使用python备份文件
			想写个定时备份文件的功能,这个功能需要实现:1.搜索指定的目录里是否存在当天的文件2.如果存在压缩并加密文件3.通过ftp上传到备份服务器4.在备份服务器上定时将文件拷贝到移动硬盘并定时清理文件 本来 ... 
- ArcGIS按选定线分割面-案例教程
			ArcGIS按选定线分割面-案例教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能 方法:高级编辑 实例: 分割前后 联系方式:谢老师,135-4855-43 ... 
- js中的“默默的失败”
			看阮一峰的js标准教程,看到了“默默的失败”觉得很形象也很无奈, 总结一下都有哪些地方会“默默的失败” 字符串内部的单个字符无法改变和增删,这些操作会默默地失败. var s = 'hello'; d ... 
- 爬虫之scrapy扩展
			针对pipelines的扩展 from scrapy.exceptions import DropItem class CustomPipeline(object): def __init__(sel ... 
