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函数来实现多路复 ...
随机推荐
- Vue组件间传值 v-model
使用过Vue的同学应该都了解组件之间传值 父组件 --> 子组件 : props 子组件 --> 父组件 : 事件 其实有一种更为简单的方法,是基于上述两种方法,那就是 v-model 我 ...
- linux命令行下xlsx转换成pdf或csv的笔记
使用libreoffice(可以用yum直接安装,占用了4xxM磁盘空间...) 然后命令行执行: 转换成csv,支持utf-8中文编码: libreoffice --invisible --con ...
- oracle数据库用户删除及表空间删除
以system用户登录,查找需要删除的用户: --查找用户 select * from dba_users; --查找工作空间的路径select * from dba_data_files; --删 ...
- centos下删除MYSQL 和重新安装MYSQL
centos下彻底删除MYSQL 和重新安装MYSQL 因centos系统自带的mysql版本比较低5.1,所以想卸载重新安装较新版本,下面是过程 1 删除Mysql yum remove mysql ...
- python学习Day9 内存管理
复习 :文件处理 1. 操作文件的三步骤:-- 打开文件:此时该文件在硬盘的空间被操作系统持有 | 文件对象被应用程序持用 -- 操作文件:读写操作 -- 释放文件:释放操作系统对文件在硬盘间的持有 ...
- Taro开发微信小程序之利用腾讯地图sdk标记
首先要下载腾讯地图提供的sdk,放在项目的对应目录下,引用. import QQMapWX from '../../sdks/qqmap-wx-jssdk' 设置好后,就可以开始使用了. let qq ...
- github 绑定域名
github的域名其实就两种,一种是个人主页,即所谓的每个账号只有一个的个人主页,XXXX.github.io,分支是master: 另一种是项目主页,可以有无数个,网上说分支应该是gh-pages, ...
- com.android.support:design
Error:Could not find com.android.support:design:27.3.1.Required by: project :app Please install the ...
- python 并发编程 锁 / 信号量 / 事件 / 队列(进程间通信(IPC)) /生产者消费者模式
(1)锁:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 虽然使用加锁的形式实现了 ...
- pandas 中有关isin()函数的介绍,python中del解释