linux中客服端创建socket进行网络通信,struct sockaddr_in的布局

一、socket介绍

如今社会是万物互联的时代,因此网络成为了最为关键的部分。人能通过人的大脑根据人的外貌特征来准确的区分。那么计算机是怎么识别计算机的呢,这时我们需要给它门一个身份来确定。网络层的“ip地址”能够识别网络中的唯一主机,“端口”能够确定主机中的唯一进程,这样确定了地址信息之后就能进行通信了。如今采用TCP/IP协议大多采用socket进行通信,而且大多部分多着C/S模型,所以学习socket对于嵌入式来说是必不可少的。

二、创建socket客户端的流程

在这里插入图片描述

三、各函数的介绍与运用
1、socket

socket函数(系统调用)原型为int socket(int domain, int type, int protocol);domain参数指定通信域,用来指定网络层协议,现在网络基本都是支持IPV4 或 IPV6协议的,这是domain参数可设定为AF_INET(网络地址为IPV4时)、AF_INET6(网络地址为IPV6时)。
type参数为当前定义的类型是套接字具有指定的类型,该类型指定通信语义,又来指定传输层协议,通常我们所使用的就是TCP(提供顺序的、可靠的、双向的、基于连接的字节流) UDP(固定最大长度的无连接、不可靠消息。)两种协议,SOCK_STREAM指定TCP,SOCK_DGRAM指定UDP。
protoc参数指定要与套接字一起使用的特定协议。通常只有一个协议可以支持给定协议族中的特定套接字类型,在这种情况下,协议可以指定为0。
返回值:成功时,将返回新套接字的文件描述符(类型为:int)。出现错误时返回-1,并正确设置errno。

if((sockfd=socket(AF_INET, SOCK_STREAM, 0))<0)
	{
   
		printf("creat socket failure:%s\n",strerror(errno));	
		return -1;
	}

代表着创建了一个IPV4地址网络协议、TCP协议的socket成功将返回值赋给sockfd,出错将打印出错信息,strerror函数的作用是:返回一个指向字符串的指针,该字符串描述参数errnum中传递的错误代码。调用此函数linux内核会将错误原因告诉我们。socket函数的更具体的解释可参考man手册

2、connect

connect函数原型int connect(int sockfd, const struct sockaddr*addr,socklen_t addrlen)。将文件描述符sockfd引用的套接字连接到addr指定的地址。addrlen参数指定addr的大小。
第一个参数sockfd是socket所创建的一个文件描述符,第二个参数addr中地址的格式由sockfd决定。第三个参数addrlen指定addr的大小,下面将来介绍struct sockaddr_in 和 struct sockaddr 两中结构体:
在这里插入图片描述
struct sockaddr_in类型进行赋值时,注意将主机字节序转换位网络字节序。sin_family与socket函数中参数domain相对应,可设为AF_INET(网络地址为IPV4时)、AF_INET6(网络地址为IPV6时),sin_port 指定了服务器的端口,但是我们要传进去的port原型一般设为int型,此时我们需要函数htons将port转换为网络字节序,sin_addr的内容存储着服务器的IP,用inet_aton函数将主机字节序准换为网络字节序。部分代码如下:

memset(&servaddr, 0, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(port);
	inet_aton(servrip,&servaddr.sin_addr);

	if((rv=connect(sockfd, (struct sockaddr *
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值