网络编程基础集
来源:互联网 发布:王者荣耀输入法软件 编辑:程序博客网 时间:2024/06/04 19:38
1.1主机字节序和网络字节序
Linux通过函数来完成主机字节和网络字节之间的转换。
htonl 、 htons 、ntohl、ntohs四个函数来实现,
htonl(host to network long);
htons( host to network short );
ntohl(network to host long);
ntohs(network to host short);
1.2通用的socket地址
socket网络编程接口中表示socket地址的是一个结构体socketaddr;
struct socketaddr{ sa_family_t sa_family;//地址族类型的变量 char sa_data[14];//存放socket地址值};
1.3专用socket地址
socketaddr_in 用于ipv4
struct socketaddr_in{ sa_family_t sin_family;//地址族AF_INET u_int16_t sin_port ;//端口号,需要用网络字节表示 struct inaddr sin_addr;//IPV4地址结构体};//IPV4的结构体struct in_addr{ u_int32_t s_addr;//IPV4地址,要用网络字节表示;};
所有专用的socket地址类型的变量,在使用的时候都是需要强制转化socketaddr,因为所有的socket编程接口使用的地址参数类型都是socketaddr;
2.创建socket
int socket( int domain, int type, int protocol);
domain :告诉系统是哪一层协议族;PF_INET—>IPV4
PF_INET6—->IPV6
type :指定是流服务(SOCK_STREAM)还是数据报( SOCK_UGRAM);
protocol :通常是唯一的,我们应该是0;
3.命名socket
我们在创建socket时,我们只是给定了地址族协议,但是未制定是哪一个具体的socket地址。
int blind(int socketfd, const struct socketaddr *my_addr, socklen_t addrlen);
4.监听socket
int listen( int socketfd, int backlog);
backlog :参加监听的最大队列;如果客户端有超过backlog的值,那么就不做处理。
5.接受链接
int accept(int socketfd , struct socketaddr *addr, socketlen_t *addrlen);
accept成功时返回一个新的连接端socket地址,
6.发起连接
当服务器打开成功以后,就处于listen状态,但是客户端还要与之建立连接。
int connet(int socketfd , const struct socketaddr *serv_addr,socketlen_t addrlen);
7.关闭连接
close(int socketfd);
close系统调用并非总是立即关闭一个连接,而是将其计数减1;只有当fd的引用计数为0,才真正的关闭。
socket的过程:
三次握手的过程
四次挥手的过程
- 网络编程基础集
- 网络编程:网络基础
- iOS基础之网络编程问题集
- 网络编程基础
- 网络编程基础
- c#网络编程基础
- 网络编程基础(1)
- 网络编程基础(2)
- 网络编程基础(3)
- 网络编程知识基础
- VC网络编程基础
- linux网络编程基础
- 网络编程基础篇
- VC网络编程基础
- VC网络编程基础
- VC网络编程基础
- Linux 网络编程基础
- Socket网络编程基础
- 多态和多态对象模型
- 一个求数组中最大元素的函数模板
- linux之Vim文档编辑
- LeetCode
- HDU
- 网络编程基础集
- 【Java 你应该知道的】 泛型01
- html5 css js轮播图动画
- Fluent FIDAP v8.7_简体中文教程7.rar
- ASP.net button验证
- String,StringBuffer,StringBuilder的区别
- 编写shell脚本遇到的问题
- (11)XML入门
- include<stdlib.h>与include“kdtree”的本质区别