Linux C网络编程之Socket套接字
来源:互联网 发布:js 判断浏览器版本号 编辑:程序博客网 时间:2024/05/21 22:56
套接字类型分为3种:流式套接字(SOCK_STREAM),数据包套接字(SOCK_DGRAM)和原始套接字。
流式套接字:提供可靠的,面向连接的通信流,并且,用流式套接字发送的数据顺序是1, 2, 3 ……的话,接收端接收到的数据也是 1, 2, 3……。
简言之:TCP连接方式
数据包协议:无连接的, 数据独立,无序且不保证数据传输的可靠性。
简言之:UDP连接方式
流式套接字服务端工作流程:
socket()创建套接字--->bind()套接字名字--->listen()创建套接字队列--->accept()接收连接--->read()读取客户端信息--->write()回复客户端信息--->close()关闭客户端socket连接
socket(int domain, int type, int protocol)
domain:地址族
domain的取值范围如下表,大多数情况下会使用AF_UNIX / AF_INET:
参数说明AF_UNIXUNIX内部(文件系统套接字)AF_INETARPA因特网协议(UNIX网络套接字)AF_ISOISO标准协议AF_NSAF_IPXNOVELL IPX协议AF_APPLETALKAppletalk DDS
type:套接字对应的通信类型(SOCK_STREAM / SOCK_DGRAM)
protocol:协议,参数默认值0,根据套接字类型和域决定。如SOCK_STREAM 对应 0。
套接字地址:
这里介绍AF_UNIX和AF_INET的套接字地址
AF_UNIX是包含在sys/un.h头文件中的sockaddr_un结构,该结构定义为:
struct sockaddr_un {
sa_family_t sun_family; //是一个short类型
char sun_path[]; //路径长度有限:不能超过108个字符
}
AF_INET是包含在netinet/in.h中的sockaddr_in结构,该结构为:
struct sockaddr_in {
short int sin_family; //AF_INET
unsigned short int sin_port; //端口号
struct in_addr sin_addr; //Internet地址
}
套接字的名字(bind())
int bind(int socket, const struct sockaddr *address, size_t address_len);
成功返回0,否则返回-1,并有errno变量
创建套接字队列 listen()
int listen(int socket, int backlog);
backlog设置连接的个数,套接字上排列的接入连接个数最多不能超过这个数字。常用值为5.
成功返回0,否则返回-1.
接收连接 accept()
int accept( int socket, struct sockaddr *address, size_t *address_len);
请求连接 connect()
int connect(int socket, const struct sockaddr *address, size_t address_len);
read():读取数据
write():写入/返回数据
关闭连接 close(socket 标识符)
服务器端代码:
客户端代码:
- Linux C网络编程之Socket套接字
- 网络套接字socket编程之TCP
- 网络套接字socket编程之UDP
- linux网络编程之套接字编程
- linux网络编程之socket(十五):UNIX域套接字编程和socketpair 函数
- linux网络编程之socket(十五):UNIX域套接字编程和socketpair 函数
- Linux网络编程之socket:unix域套接字编程与socketpair函数
- linux网络编程之socket(十五):UNIX域套接字编程和socketpair 函数
- 网络编程socket套接字
- 网络编程——Socket(Linux套接字编程)
- Java编程思想之网络编程(二)套接字Socket
- Java网络编程之套接字(Socket编程)
- LINUX网络编程之套接字
- Linux 网络编程之原始套接字
- Linux 网络编程之原始套接字
- Linux 网络编程之原始套接字
- Linux网络编程之套接字基础
- Linux网络编程之TCP套接字
- 系统缓存学习(五)文件缓存依赖
- 打印一个螺旋图
- C++对C的扩充(2)
- android xml 怎么设置版本最低和最高!
- BIOS中断大全
- Linux C网络编程之Socket套接字
- 互相帮助
- 2010年顶嵌杯决赛B题
- linux下用户空间与内核空间数据交换方式
- Verilog assign和always 注意事宜
- HDU 1075 What Are You Talking About
- enc28j60网卡驱动移植到tcc8900上 -----续
- FCKeditor取得内容的长度
- 敏捷开发的五种实践-《敏捷开发的艺术》读书笔记2