linux网络编程笔记

网络套接字:socket

一个文件件描述指向一个套接字(该套接字内部由内核借助两个缓冲区实现)
在通讯过程中,套接字一定是成对出现的

网络字节序

1、小端法:(pc本地存储)高位存高地址,地位存低地址
2、大端法:(网络存储)高位存低地址。低位存高地址
3、htonl–>本地—>网络(ip) :192.168.1.11—>string–>atoi—>int—>htonl---->网络
4、htons—>本地—>网络(port)
5、ntohl—>网络—>本地(ip)
6、ntohs---->网络----->本地(port)

IP地址装换函数

//本地字节序---->网络字节序
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
//af:AF_INET、AF_INET6
//src:IP地址(点分十进制)
//dst:传出,装换后的网络字节序的IP地址
//返回值:成功 1
//       异常  0  说明不是一个有效的ip地址
//       失败:-1
//网络字节序------>本地字节序
 #include <arpa/inet.h>
 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
 /*af:AF_INET、AF_INET6
 *SRC:网络字节序的IP地址
 *dst:本地字节序的IP地址(string IP)
 *size:dst的大小
 *返回值:成功:dst
 *              失败:NULL
 */

sockaddr数据结构

socksffr结构体

Address format
An IP socket address is defined as a combination of an IP interface address and a 16-bit port number. The basic IP protocol does not supply port
numbers, they are implemented by higher level protocols like udp(7) and tcp(7). On raw sockets sin_port is set to the IP protocol.

       struct sockaddr_in {
           sa_family_t    sin_family; /* address family: AF_INET */
           in_port_t      sin_port;   /* port in network byte order */
           struct in_addr sin_addr;   /* internet address */
       };

       /* Internet address. */
       struct in_addr {
           uint32_t       s_addr;     /* address in network byte order */
       };

socket模型创建

在这里插入图片描述
重要结论:整个模型一共有三个套节字

//流程分析
1、socket()会生成一个套节字
2、bind()绑定ip+port
3、listen()设置监听上限,同时
4、accpet()阻塞监听客户端连接

函数分析

socket

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
//创建一个套接字
 int socket(int domain, int type, int protocol);

domain:AF_INET、AF_INET6、AF_UNIX(创建本地套接字)
type:SOCK_STREAM(TCP)、SOCK_DGRAM(UDP)
protocol:0
返回值:succes:新套接字所对应的文件描述符
failure:-1 error

bind

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>         //绑定ip和端口
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

在这里插入图片描述

listen

//listen - listen for connections on a socket
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

int listen(int sockfd, int backlog);

在这里插入图片描述

accept

#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

connect

//connect - initiate a connection on a socket
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>

 int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

在这里插入图片描述

TCP流程分析

server:
	1、socket()       创建套接字,生成一个文件描述符
	2、bing()         绑定服务器的地址结构
	3、listen()       设置监听的上限
	4、accept()       阻塞监听客户端连接
	5、read(fd)       读socket获取客户端数据
	6、执行自己的程序
	7、write(fd)
	8、close(fd)
client:
	1、socket()          创建socket
	2、connect()          与服务器建立连接
	3、write()            写数据到socket
	4、read()            读数据
	5、执行自己的程序
	6、close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值