| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 54.Linux 网络编程 -> 正文阅读 |
|
[系统运维]54.Linux 网络编程 |
socket函数: ? ? ? ? #include <sys/socket.h> ? ? ? ? int socket(int domain,int type,int protocol);? ? ? ? 创建一个套接字 domain(领域)? :AF_INET、AF_INET6、AF_UNIX type:? SOCK_STREAM、SOCK_DGRAM protocol:0 返回值:成功:新套接字所对应的文件描述符 ? ? ? ? ? ? ? 失败:-1?errno bind()函数: ????????#include <sys/types.h> ? ? ? ? ?/* See NOTES */
给socket绑定一个IP和port addr:(struct sockaddr *)&addr; struct sockaddr_in addr; addr.sin_family =?AF_INET; addr.sin_port = htons(8888);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//端口号 addr.sin_addr.s_addr = htol(INADDR_ANY);? ? ? ? ? //取出系统中有效的任意IP地址。二进制类型。 addrlen:sizeof(addr); 返回值:成功:0 ? ? ? ? ? ? ? ?失败:-1? ? ? ? ?errno listen函数 ? ? ? ?#include <sys/types.h> ? ? ? ? ?/* See NOTES */ int listen(int sockfd, int backlog);? ? 设置同时与服务器建立连接的上限数。(同时进行3次握手的客户端数量) sockfd:socket函数返回值 backlog:上限数值,最大值128 返回值: 成功:0 失败:-1?errno accept函数 ????????#include <sys/types.h> ? ? ? ? ?/* See NOTES */ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);?阻塞等待客户端建立连接 sockfd:socket函数返回值 addr:传出参数。成功与服务器建立连接的那个客户端的地址结构(IP+port)。 ? ? ? ? socklen_t client_addr_len = sizeof(addr); addrlen:传入传出? ? ? ? &client_addr_len ????????????????入:addr的大小。出:客户端addr实际大小。 返回值:能与服务器进行数据通信的socket对应的文件描述符 ?????????????成功:返回一个与客户端成功连接的socket文件描述符 ? ? ? ?? ? ? 失败:? -1?errno connect函数 ???????#include <sys/types.h> ? ? ? ? ?/* See NOTES */ ? ? ? ?int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen); sockfd:socket函数返回值 ? ? ? ? struct sockaddr_in srv_addr;? ? ? ? //服务器地址结构 ? ? ? ? srv_addr.sin_family=AF_INET; ? ? ? ? srv_addr.sin_port=666;? ? ? ? ? ? ? ? ? ?//跟服务器端口号一致? ?? ? ? ? ? inet_pton(AF_INET,“服务器的IP号”,&srv_addr.sin_addr.s_addr);? ? ? ? ? ? ? ?? addr:传入参数。服务器的地址结构 addrlen:服务器的地址结构的长度 返回值:成功:0 ? ? ? ? ? ? ? 失败·:-1 TCP通信流程分析: ? ? ? ? server: ? ? ? ? ? ? ? ? ? ? ? ? 1.socket()? ? ? 创建socket ? ? ? ? ? ? ? ? ? ? ? ? 2.bind()? ? ? ? ? 绑定服务器地址结构 ? ? ? ? ? ? ? ? ? ? ? ? 3.listen()? ? ? ? ?设置监听上限 ? ? ? ? ? ? ? ? ? ? ? ? 4.accept()? ? ? ?阻塞,监听客户端连接 ? ? ? ? ? ? ? ? ? ? ? ? 5.read()? ? ? ? ? ?读socket获取客户端数据 ? ? ? ? ? ? ? ? ? ? ? ? 6.小---大写? ? ? ?toupper():小写转大写 ? ? ? ? ? ? ? ? ? ? ? ? 7.write()???????????? ? ? ? ? ? ? ? ? ? ? ? ? 8.close() ? ? ? ? client: ? ? ? ? ? ? ? ? ? ? ? ? 1.socket()? ? ? ? 创建socket? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? 2.connect()? ? ? ?与服务器建立连接 ? ? ? ? ? ? ? ? ? ? ? ? 3.write()? ? ? ? ? ? 写数据到socket ? ? ? ? ? ? ? ? ? ? ? ? 4.read()? ? ? ? ? ? ?读转换后的数据 ? ? ? ? ? ? ? ? ? ? ? ? 5.显示读取结果?? ? ? ? ? ? ? ? ? ? ? ? ? 6.close()????????????????? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? inet_ntop函数 inet_pton()和inet_ntop()函数允许在IPv4和IPv6地址的二进制形式和点分十进制表示法或十六进制字符串表示法之间进行转换。 ? ? ? ?#include <arpa/inet.h>
这些函数名中的p表示“展现(presentation)”,n表示“网络(network)”。展现形式是人类可读的字符串,如: 198.152.189.116(IPv4点分十进制地址); ::1(IPv6冒号分隔的十六进制地址); ::FFFF:198.152.189.116(IPv4映射的IPv6地址)。 inet_ntop()函数执行逆向转换。同样, ①domain应该被指定为AF_INET或AF_INET6,? ? ? ? ? ? ? ? ?? ②addrptr应该指向一个待转换的in_addr或in_addr6结构 ③得到的以null结尾的字符串会被放置在dst_str指向的缓冲区中。 ?④len参数必须被指定为这个缓冲区的大小。 ???????? 服务器:
? 客户端
? ? ?? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/24 11:35:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |