Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

以下部分内容摘抄自C语言中文网与百度百科,因为我不知道比这两个更好的渠道了,如果有其他更好的渠道欢迎补充。在我博客的socket分类下,超链接文本”更多内容”通常是跳转到以上提到的这几个网站。
以下内容皆与Windows无关。
写此篇的目的是方便博主自己边看书边方便的查看相关内容。
(2021/02/20) 在每个函数中都加入了返回值条目。参考文献: 百度百科, C语言中文网。如果这两个网站上查到的函数中如果有一个是返回宏的,一个是返回数值的,我会将返回数值的记录在返回值条目里,而返回宏的不会被记录。

第一章

1.2章 一个简单的时间获取客户程序

书中提到的206.168.112.96已经ping不通了。

AF_INET: Ipv4网络协议.
SOCK_STREAM: 提供面向连接的稳定数据传输,即TCP协议.
SA: 书中有提到,unp.h中使用#define把SA定义为struct sockaddr, 也就是通用套接字地址结构。

socket()函数

头文件:#include <sys/types.h> #include <sys/socket.h>
函数原型: int socket(int domain, int type, int protocol);
返回值: 成功则返回socket 处理代码, 失败返回-1.

更多内容。这里写了参数等内容。

sockaddr_in结构体

头文件: netinet/in.h
在windows/linux下有下面结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
struct sockaddr_in

{

short sin_family;/*Address family一般来说AF_INET(地址族)PF_INET(协议族)*/

unsigned short sin_port;/*Port number(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/

struct in_addr sin_addr;/*IP address in network byte order(Internet address)*/

unsigned char sin_zero[8];/*Same size as struct sockaddr没有实际意义,只是为了 跟SOCKADDR结构在内存中对齐*/

};

更多内容。里面有参数等内容。

bezero()函数

该函数效果和memset()差不多,故此不再多写。

htonl()函数

将主机数转换成无符号长整型的网络字节顺序。本函数将一个32位数从主机字节顺序转换成网络字节顺序。

头文件: <arpa/inet.h> 有些系统包含的头文件是 <netinet/in.h> 而不是 <arpa/inet.h>.
函数原型: uint32_t htonl(uint32_t hostlong);
返回值: 返回一个网络字节顺序的值。
参数: hostlong:主机字节顺序表达的32位数。

更多内容

inet_pton()函数

inet_pton是一个IP地址转换函数,可以在将点分文本的IP地址转换为二进制网络字节序”的IP地址,而且inet_pton和inet_ntop这2个函数能够处理ipv4和ipv6。

头文件: <sys/socket.h> <netinet/in.h> <arpa/inet.h>
函数原型: int inet_pton(int af, const char *src, void *dst);
返回值: 如果函数出错将返回一个负值,并将errno设置为EAFNOSUPPORT,如果参数af指定的地址族和src格式不对,函数将返回0。

更多内容

connect()函数

connect()用于建立与指定socket的连接。

头文件: <sys/socket.h>
函数原型: int connect(SOCKET s, const struct sockaddr * name, int namelen);
返回值: 若无错误发生,则connect()返回0。
参数:
s:标识一个未连接socket
name:指向要连接套接字的sockaddr结构体的指针
namelen:sockaddr结构体的字节长度

更多内容

read()函数

read()会把参数fd 所指的文件传送count 个字节到buf 指针所指的内存中. 若参数count 为0, 则read()不会有作用并返回0. 返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据,此外文件读写位置会随读取到的字节移动。

头文件: <unistd.h>
函数原型: ssize_t read(int fd, void * buf, size_t count);
返回值: 成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0。

更多内容

1.5章一个简单的时间获取服务器程序

已经在前面提到过的函数不会再归类在1.5章里。作者使用的包裹函数,如Write(), Listen()等,只会给出其中调用的函数,如write(), listen()。本段并不会记录属于time.h里面内容。

INADDR_ANY: 任何地址
LISTENQ: #define LISTENQ 1024 (这是在我的unp.h中找到的)

bind()函数

将一本地地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在connect()或listen()调用前使用。当用socket()创建套接口后,它便存在于一个名字空间(地址族)中,但并未赋名。bind()函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址/端口号)。

头文件: <sys/types.h> <sys/socket.h>
函数原型: int bind( int sockfd , const struct sockaddr * my_addr, socklen_t addrlen);
返回值: 如无错误发生,则bind()返回0。否则的话,将返回-1,应用程序可通过WSAGetLastError()获取相应错误代码。

更多内容: 百度百科中的bind(), C语言中文网中的bind()

listen()函数

创建一个套接口并监听申请的连接.

头文件: <sys/socket.h>
函数原型: int listen( int sockfd, int backlog);

返回值: 如无错误发生,listen()返回0。否则的话,返回-1,应用程序可通过WSAGetLastError()获取相应错误代码。

更多内容

accept()函数

accept()是在一个套接口接受的一个连接。accept()是c语言中网络编程的重要的函数,本函数从s的等待连接队列中抽取第一个连接,创建一个与s同类的新的套接口并返回句柄。

头文件: <sys/socket.h>
函数原型: int accept(int s, struct sockaddr * addr, socklen_t * restrict addrlen); (其实socklen_t就是int类型,而C语言中文网上也写着是int类型,但是无论怎么说,它形参上确实写着socklen_t。Linus说这似乎是POSIX为了掩饰自己的错误创造出来的类型 –博主注)
返回值: 返回值:成功则返回新的socket 处理代码, 失败返回-1, 错误原因存于errno 中。

更多内容: 百度百科中的accept(), C语言中文网中的accept()

write()函数

函数说明:write()会把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内. 当然, 文件读写位置也会随之移动。

头文件: <unistd.h>
函数声明: ssize_t write (int fd, const void * buf, size_t count);
返回值: 如果顺利write()会返回实际写入的字节数。当有错误发生时则返回-1,错误代码存入errno中。

更多内容

close()函数

函数说明:当使用完文件后若已不再需要则可使用 close()关闭该文件, 二close()会让数据写回磁盘, 并释放该文件所占用的资源. 参数fd 为先前由open()或creat()所返回的文件描述词.

头文件: <unistd.h>
函数原型: int close(int fd);
返回值:若文件顺利关闭则返回0, 发生错误时返回-1.

更多内容

评论



愿火焰指引你