socket套接字编程函数
来源:互联网 发布:淘宝工作室是做什么 编辑:程序博客网 时间:2024/06/06 05:06
网络编程中接受连接请求的套接字创建过程可整理如下:
- 调用socket函数创建套接字
- 调用bind函数分配IP地址和端口
- 调用listen函数转为可接收请求状态
- 调用accept函数受理连接请求
函数说明
socket()函数
#include <sys/socket.h>// 成功时返回文件描述符,失败时返回-1int socket(int domain, int type, int protocol);
参数
- domain:套接字中使用的协议族(Protocol Family)信息;
- type:套接字数据传输类型信息
- protocol:计算机通信中使用的协议信息
协议族(Protocol Family)
头文件sys/socket.h中声明的协议族
套接字类型(Type)
面向连接的套接字:SOCK_STREAM
- 传输过程中数据不会消失
- 按序传输数据
- 传输的数据不存在数据边界(Boundary)
面向消息的套接字:SOCK_DGRAM
- 强调快速传输而非传输顺序
- 传输的数据可能丢失也可能损毁
- 传输的数据有数据边界
- 限制每次传输的数据大小
协议(Protocol)
- IPPROTO_TCP – TCP传输协议
- IPPTOTO_UDP – UDP传输协议
- IPPROTO_SCTP – STCP传输协议
- IPPROTO_TIPC – TIPC传输协议
bind()函数
// 成功时返回0,失败时返回-1int bind(int sockfd, const struct sockaddr *addr, socklen_t, addrlen);
参数
- sockfd:socket文件描述符
- addr:一个const struct sockaddr *指针,指向要绑定给sockfd的协议地址。这个地址结构根据地址创建socket时的地址协议族的不同而不同
- addrlen:对应的是地址的长度
sockaddr对应IPv4的结构体如下:
struct sockaddr_in{ sa_family_t sin_family; // 地址族(Address Family) uint16_t sin_port; // 16位TCP/UDP端口号 struct in_addr sin_addr; // 32位IP地址 char sin_zero[8]; // 不使用};struct in_addr{ In_addr_t s_addr; // 32位IPv4地址};
listen()函数
// 成功时返回0,失败时返回-1int listen(int sockfd, int backlog);
参数
- sockfd:socket文件描述符
- backlog:socket可以排队的最大连接个数
accept()函数
// 成功时返回文件描述符,失败时返回-1int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数
- sockfd:socket文件描述符
- addr:服务器的socket地址
- addrlen:socket地址的长度
connect()函数
// 成功时返回文件描述符,失败时返回-1int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
参数
- sockfd:socket文件描述符
- serv_addr:服务器的socket地址
- addrlen:socket地址的长度
文件操作
打开文件
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>// 成功时返回文件描述符,失败时返回-1int open(const char *path, int flag);
参数
- path:打开的目标文件名及路径信息
- flag:文件的打开模式
文件的打开模式
关闭文件
#include <unistd.h>// 成功时返回0,失败时返回-1int close(int fd);
参数
- fd:需要关闭文件或套接字的文件描述符
将数据写入文件
#include <unistd.h>// 成功时返回写入的字节数,失败时返回-1ssize_t write(int fd, const void *buf, ssize_t nbytes);
参数
- fd:显示数据传输对象的文件描述符
- buf:保存要传输数据的缓冲地址值
- nbytes:要传输数据的字节数
读取文件中的数据
#include <unistd.h>// 成功时返回接收的字节数(但遇到文件结尾则返回0),失败时返回-1ssize_t read(int fd, void *buf, ssize_t nbytes);
参数
- fd:显示数据接收对象的文件描述符
- buf:要保存接收数据的缓冲地址值
- nbytes:要接收数据的最大字节数
0 0
- socket套接字编程函数
- Socket套接字编程
- socket套接字编程
- socket 套接字编程
- socket套接字编程
- Linux系统编程下的套接字socket编程函数
- 基本套接字编程socket函数和connect函数
- PHP套接字编程(socket)
- 套接字socket高级编程
- WinCE Socket套接字编程
- 套接字和socket编程
- 【socket】TCP套接字编程
- Java套接字Socket编程
- ios Socket套接字编程
- JavaSE 套接字Socket编程
- Windows套接字编程/Socket
- 网络编程socket套接字
- iOS socket 套接字编程
- JAVA基础--db17_javaMap集合_集合框架工具类
- Max Points on a Line
- 面试算法题
- 安卓控件使用系列1:TextView显示各种格式的文本
- Struts2 多文件上传
- socket套接字编程函数
- JavaScript之浏览器兼容问题
- 转载:iOS开发的一些奇巧淫技
- CodeForces 2A Winner(CodeForces的题意总是那么难理解)——Codeforces Beta Round #2
- 习题6-11 树重建 UVa 10410 *
- 复制构造函数跟赋值构造函数的区别
- IOS中Json解析的四种方法
- 金山词霸2016 代理设置 方法
- innodb 优化