TCP/IP网络编程笔记-ch1.理解网络编程和套接字

函数

服务器

创建套接字:

#include<sys/socket.h>
int socket(int domain,int type,int protocol)
//成功返回文件描述符,失败返回-1

为套接字分配地址:

#include<sys/socket.h>
int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen);
//成功返回0,失败返回-1并设置errno

常见的errno:
    EACCES:被绑定的地址是受保护的地址,仅超级用户能访问。比如普通用户将socket绑定到知名服务端口
    (端口号0~1023上)时,bind将返回EACCES错误。
    EADDRINUSE:被绑定地址正在使用。(如将socket绑定到一个处于TIME_WAIT状态的socket地址)

将套接字转化成可接受连接状态:

#include<sys/socket.h>
int listen(int sockfd,int backlog);
//成功返回0,失败返回-1并设置errno

backlog参数提示内核监听队列的最大长度,若监听队列长度超过backlog,服务器不再受理新的客户连接
,客户端也会收到ECONNREFUSE错误信息。

    内核2.2之前的Linux中,backlog指所有处于半连接状态(SYN_RCVD)和完全连接(ESTABLISHED)的socket的上限
    2.2之后,它只表示处于完全连接状态的socket的上限,处于半连接的socket的上限,
    处于半连接状态的socket的上限则由/proc/sys/net/ipv4/tcp_max_syn_backlog内核参数定义。
    backlog典型值为5.

在这里插入图片描述

半连接与全连接:
TCP全连接和半连接

接收连接:

#include<sys/socket.h>
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
//成功返回文件描述符,失败返回-1

接收连接的套接字创建过程:

socket创建套接字
bind分配IP地址和端口号
listen转为可接受请求状态
accept受理连接请求

客户端

请求连接:

#include<sys/socket.h>
int connect(int sockfd,struct sockaddr *serv_addr,socklen_t addrlen);
//成功返回0,失败返回-10

文件操作

打开文件

#include<sys/types.h>
#include<sys/stat.h>
#include<fcnt1.h>

@param path:文件名字符串地址
@param flag:文件打开模式信息
int open(const char*path,int flag);
//成功返回文件描述符,失败返回-1

文件打开模式:

打开模式含义
O_CREAT必要时创建文件
O_TRUNC删除全部现有数据
O_APPEND维持现有数据,保存到其后面
O_RDONLY只读打开
O_WRONLY只写打开
O_RDWR读写打开

关闭文件

#include<unistd.h>

int close(int fd);
//成功返回0,失败返回-1

数据写入文件

#include<unistd.h>

@param fd:显示数据传输对象的文件描述符
@param buf:保存要传输数据的缓冲地址值
@param nbytes:要传输数据的字节数
ssize_t write(int fd,const void *buf,size_t nbytes);
//成功返回写入字节数,失败返回-1

实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cQORjkLL-1641630369443)(https://note.youdao.com/yws/res/8/WEBRESOURCEd3850f795cf1a57d05e5a2016e4da908)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HTDAkhu-1641630369444)(https://note.youdao.com/yws/res/a/WEBRESOURCE55efd2a1b11b3ddbf2ed2a21ec75909a)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值