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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux 下载文件 rz,linux rz/sz上传下载文件命令「建议收藏」

    linux 下载文件 rz,linux rz/sz上传下载文件命令「建议收藏」一、工具说明在SecureCRT这样的ssh登录软件里,通过在Linux界面里输入rz/sz命令来上传/下载文件.对于某些linux版本,rz/sz默认没有安装所以需要手工安装。sz:将选定的文件发送(send)到本地机器;rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive).下载安装包lrzsz-0.12.20.tar.gz:http://www….

    2022年8月24日
    7
  • javaweb项目部署到tomcat_idea创建tomcat项目

    javaweb项目部署到tomcat_idea创建tomcat项目提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、创建JavaWeb项目二、使用步骤三、修改默认加载界面提示:以下是本篇文章正文内容,下面案例可供参考一、创建JavaWeb项目新建一个简单的Javaweb项目,具体如下图所示tomca没有配置的话,ApplicationServer是没有默认tomcat的。这时候需要自己引入,点击输入框右边文件夹图标,找到tomcat所在文件夹位置即可(没有先下载tomcat)。完成直接Next,配置项目保存的路径后就完成了.

    2026年1月28日
    5
  • MySQL索引创建及使用

    MySQL索引创建及使用背景最近在深化学习数据库相关知识,借此机会总结记录一番,本来想自己总结概括一下,但是看到一篇写的简洁明了的博客,为节约时间就直接搬运过来了,有些地方加入一些自己的见解。https://blog.csdn.net/xluren/article/details/32746183关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL…

    2022年5月5日
    37
  • pycharm如何返回上一个步骤_pycharm如何返回上一个步骤

    pycharm如何返回上一个步骤_pycharm如何返回上一个步骤view>>Appearance>>Toolbar启用toolbar后用点击左键就可返回上一次编辑的位置

    2022年8月25日
    8
  • 关于C++ const 的全面总结

    关于C++ const 的全面总结

    2021年12月15日
    43
  • 大文件上传和断点续传_文件断点续传实现的思路

    大文件上传和断点续传_文件断点续传实现的思路需求:支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验;内网百兆网络上传速度为12MB/S服务器内存占用低支持文件夹上传,文件夹中的文件数量达到1万个以上,且包

    2022年8月2日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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