赞
踩
socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。
通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。
这个数据报格式套接字可以达到高质量的数据传输。这是因为它使用了 TCP 协议
09-05补充
1 网络字节序 主机字节序 和点分十进制之间的转换
2 长连接和短链接
3 三次握手 注意同步确认序号 或者说请求和应答(总而言之三件事 同步 协商 确认)以及SYN ACK
之前写的参考1
三次握手2
listen第二个参数数字的含义[随手笔记]
为什么是三次握手和四次挥手[随手笔记]
Linux当中的一种文件类型,伪文件,不占用存储空间,可进行IO操作,可间接看做文件描述符使用。
通信方式:信号量 管道 消息队列 共享内存 套接字
区别:套接字支持网络上两台以上的设备进行通信,其他其中只能在一台设备上
原因: Socket有双个缓冲区
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
Linux查看手册
man 2 函数名称
作用:
用于服务器和客户端,创建套接字,返回一个可操作的文件描述符
参数使用:
int socket(int domain,int type,int protocal);
参数一:表示ip地址类型,常用的有两种
AF_INET
表示IPv4地址,比如127.0.0.1,这是一个本机测试ipAF_INET6
表示IPv6地址,比如2001:3CA1:10F:1A:121B:0:0:10参数二:表示数据传输方式/套接字类型,常见两种
SOCK_STREAM
(流格式套接字/面向连接的套接字)SOCK_DGRAM
(数据报套接字/无连接的套接字)参数三:表示传输协议,理论上前两个参数已经可以推演出采用哪种协议主要是为了解决,两种不同的协议支持同一种地址类型和数据型。如果我们不指明使用哪种协议,操作系统是没办法自动推演的。如果两种情况只有一个协议满足条件,可以将protocol
的值设为 0
,系统自动推演出采用哪种协议
返回值:返回一个套接字(文件描述符fd)
作用:
用于服务器,给sockfd套接字绑上本机地址和使用端口,确定了服务器的身份
参数使用:
Int bind(int sockfd,const struct sockaddr*addr,socklen_t addrlen);
struct sockaddr_in{
(涉及强制转换sockaddr_in ->sockaddr 参考)
short int sin_family; //地址族
unsigned short int sin_port; //端口号
struct in_addr sin_addr; //IP地址
}
struct in_addr {
__be32 s_addr;
};
函数作用:
用于服务器,使socket处于监听模式,监听时候有客户端连接,并放入队列(也可以说,设置同时与服务器建立连接的上限)(同时进行3次握手连接的客户端数量)
参数使用:
int listen(int sockfd,int backlog);
函数作用:
用于服务器,接收一个客户端的连接请求,并返回连接客户端的套接字便于IO操作,如果没有客户连接会阻塞等待。
参数使用:
int accept(int sockfd,struct sockaddr*addr,socklen_t*addrlen)
函数作用:
用于客户端,函数可以和自动与远端服务器建立连接
参数使用:
int connect(int sockfd,struct sockaddr*serv_addr,int addrlen)
代码部分要求是能够自主写出,不查看,比较重要。
服务器
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #define SER_PORT 8000 int main(void) { int sockfd,connfd;// int len; char wbuf[1024]; char rbuf[1024]; struct sockaddr_in serveraddr,clientaddr; //两个结构体 一个用于绑定身份到套接字 一个用于接收客服端的结构体 //1.创建监听套接字 sockfd = socket(AF_INET,SOCK_STREAM,0); //2.bind(通信需要套接字 把家的地址 门牌号绑上去 ip和端口) bzero(&serveraddr,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。