Linux c++(socket网络通信基础)
只有整型和浮点型,才会存在大小端问题。大小端在使用上就好似鸡蛋要从那边吃,没有什么差异
小端模式对于英特尔的cpu来说就是小端在前大端在后(英特尔cpu是小端的)
国产cpu就是大端
使用16进制是为了直接申请内存,因为申请内存,是2的整数倍这样效率才好
8进制多用于权限相关
SOCKET
-
文件(内核的缓冲区)操作
-
socket tcp server
- 创建套接字
- int lfd = socket;
- 绑定本地IP和端口
- struct sockaddr_in serv;
- serv.port = htons(port);
- serv.IP = htnol(INADDR_ANY);
- bind(lfd,&serv,sizeof(serv));
- 监听
- listen(lfd,128);
- 等待并接收链接请求
- struct sockaddr_in client;
- int len = sizeof(client);
- int cfd = accept(lfd,&client,&len);
- cfd 用于通信的描述符
- 通信
- 接收数据: read/recv
- 发送数据: write/send
- 关闭
- close(lfd);
- close(cfd);
- 创建套接字
-
socket tcp client
- 创建套接字
- int fd = socket;
- 链接服务器
- struct sockaddr_in server;
- server.port
- server.ip =
- server.family
- connect(fd,&server,sizeof(server));
- 通信
- 接收数据: read/recv
- 发送数据: write/send
- 断开
- close(lfd);
- close(cfd);
- 创建套接字
-
IP地址转换函数(方式一)
- 本地IP转网络字节序 字符串---> int(大端方式存储)
- int inet_pton(int af,const char *src,void *dst);
- df
- src
- 点分十进制的IP
- dst
char buf[]="192.168.1.4"; unsigned int num = 0; inet_pton(AF_INET,buf,&num); unsigned char *p = (unsigned char*)# printf("%s\n",p); char str[1024] = {0}; inet_ntop(AF_INET,&num,str,INET_ADDRSTRLEN); printf("%s\n",str); - 网络字节序转本地IP int--->字符串
- const char* inet_ntop(int af,const void* src,char* dst,socklen_t size);
- af
- af_inet
- src
- 网络字节序的整型IP
- dst
- size INET_ADDRSTRLEN 宏的值16 INADDR_ANY值为0
- af
-
IP地址转换函数(方式二)
- 主机字节顺序 --> 网络字节顺序
uint16_t htons(uint16_t hostshort); 端口
uint32_t htonl(uint32_t hostlong); IP - 网络字节顺序 --> 主机字节顺序
uint16_t ntohs(uint16_t netshonrt); 端口
uint32_t ntohl(uint32_t netlong); IP
- 主机字节顺序 --> 网络字节顺序

浙公网安备 33010602011771号