C语言 socket函数

C语言 socket函数socket#include<sys/types.h>#include<sys/socket.h>intsocket(intdomain,inttype,intprotocol);参数描述domain设置通信域(本地(PF_LOCAL),ipv4(AF_INET),ipv6()等)type设置套接字通信类型(TCP,双向字…

大家好,又见面了,我是你们的朋友全栈君。

socket

#include<sys/types.h>
#include<sys/socket.h>
int socket(int domain, int type, int protocol);
参数 描述
domain 设置通信域(本地(PF_LOCAL),ipv4(AF_INET),ipv6()等)
type 设置套接字通信类型(TCP,双向字节流(SOCK_STREAM),UDP(SOCK_DGRAM))
protocol 某个协议的特定类型,既type类型中某个类型.通常只有一个类型,所以设置成0

本地和网络字节转换

网络字节顺序NBO(Network Byte Order),按从高到底顺序存储,(大端:低位存放在高字节)
主机字节顺序(HBO,Host Byte Order)(小端:低位存放在低字节)

方法 描述
htonl() “Host to Network Long int”
ntohl() “Network to Host Long int”
htons() “Host to Network Short int”
ntohs() “Network to Host Short int”

INADDR_ANY 就是0.0.0.0,意思就是本机所有的网卡(因为有些机子不止一块网卡).在多卡的情况下,如果我们绑定了某个具体的ip地址,那么就只能监听所设置的ip地址所在的网卡端口,其他的两块网卡无法监听端口.

sockaddr_in

struct sockaddr_in {
  short int sin_family; /*指代协议族,在socket编程中只能是AF_INET */
  unsigned short int sin_port; /* 端口号 */
  struct in_addr sin_addr; /* IP地址, in_addr这个数据结构,下面会有对in_addr的介绍*/
  unsigned char sin_zero[8]; /* Same size as struct sockaddr */
  };

struct in_addr {
  union {
  struct{ unsigned char s_b1,s_b2, s_b3,s_b4;} S_un_b;
  struct{ unsigned short s_w1, s_w2;} S_un_w;
  unsigned long S_addr;
  } S_un;
  } IN_ADDR;

socklent_t

在32位下size_tint长度相同,都是32bit,
在64位下sie_tint长度不同,分别是32bit和64bit
而socket中accpet函数的第三个参数必须和int长度相同,所以变设置了socklen_t的类型

accept

提取所监听套接字的第一个链接请求,创建新的套接字,并返回文件描述符,新建立的套接字准备发送send()和接收数据recv()

#include <sys/types.h>
#include <sys/socket.h>
int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
参数 描述
sockfd 经过绑定(bind),监听(listen)的socket套接字描述符
addr 客户端的地址结构体
addrlen sizeof(struct sockaddr_in),客户端地址结构体的大小

参考文献:
https://blog.csdn.net/xc_tsao/article/details/44123331
https://blog.csdn.net/haoxiaodao/article/details/73162663
https://blog.csdn.net/Qiana_/article/details/79552087
accept

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159281.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • python sendfile_sendfile详解(转)[通俗易懂]

    python sendfile_sendfile详解(转)[通俗易懂]在apache,nginx,lighttpd等web服务器当中,都有一项sendfile相关的配置,在一些网上的资料都有谈到sendfile会提升文件传输性能,那sendfile到底是什么呢?它的原理又是如何呢?在传统的文件传输里面(read/write方式),在实现上其实是比较复杂的,需要经过多次上下文的切换,我们看一下如下两行代码:read(file,tmp_buf,len);write(…

  • linux网络95值工具,Linux下网络故障排查工具之ping|traceroute和tcptraceroute|mtr工具[通俗易懂]

    linux网络95值工具,Linux下网络故障排查工具之ping|traceroute和tcptraceroute|mtr工具[通俗易懂]服务器运维人员在日常运维服务器的过程中经常会遇到服务器网络故障,有服务器硬件造成的,也有服务商网络问题造成的,也有区域网络问题造成的,这个时候就需要用到ping,traceroute,mtr这三个命令1、ping最简单的网络请求反馈命令ping使用了ICMP回送请求和回送应答报文。ping工具发出去的数据包没有通过tcp/udp协议,但是要经过ip协议。ping命令计算的时间是数据包的往返总时间…

  • 华为手机桌面时钟天气_华为手机怎么让屏幕显示天气和时钟

    华为手机桌面时钟天气_华为手机怎么让屏幕显示天气和时钟华为手机锁屏时钟软件是一款安卓手机桌面锁屏时钟工具,拥有多种锁屏时钟样式,软件使用界面精致简洁,锁屏也能够看时间,拥有多种时钟颜色可以选择,还可以添加各种提醒服务,到点即可提醒用户,使用方法简单,拥有多种显示模式,需要的伙伴,西西下载使用吧!华为手机锁屏时钟软件特色:锁屏时钟是一款功能齐全又实用的时钟显示软件,主界面是一个自带时间、日期、天气的LED数字时钟和模拟时钟,全屏显示翻页时钟,酷炫美观…

  • oracle 优化GROUP BY[通俗易懂]

    提高GROUPBY语句的效率,可以通过将不需要的记录在GROUPBY之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多.低效:SELECTJOB,AVG(SAL)FROMEMPGROUPJOBHAVINGJOB=‘PRESIDENT’ORJOB=‘MANAGER’高效:SELECTJOB…

  • curl命令大全(数据库命令大全)

    curl命令大全简介curl是常用的命令行工具,用来请求Web服务器。它的名字就是客户端(client)的URL工具的意思。它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代Postman这一类的图形界面工具。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7aHduX6w-1597403478458)(https://www.wangbase.com/blogimg/asset/201909/bg2019090501.jpg)]不带有任

  • hfe和HFE_hfe参数

    hfe和HFE_hfe参数Mako:我们已经学习了有关晶体管的工作原理,晶体管的放大作用就是由小的输入得到大的输出吧?Doc:这种说法还稍微有点欠缺,应该说成用小的输入控制大的输出更为合适。如果只关注晶体管的电流,就可以这样考

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号