socket:
套接字,是一种接口技术,它封装了TCP/IP通信协议,使用它可以让计算机之间通过网络传输数据,所有的操作系统使用的都基于socket的接口进行网络通信的。
不光可以用于网络间通信,还可以用于进程间通信,或者可以网络通信理解为不同计算之间的进程间通信。
其实是一种内存对象,以描述符的形式呈现,发送数据即写文件,接收数据妈读文件。

int socket(int domain, int type, int protocol);
功能:创建一个socket对象
domain:地址域,什么类型的地址AF_UNIX, AF_LOCAL 接收下将使用路径地址进行进程间通信AF_INET 使用ipv4地址进行网络通信AF_INET 使用ipv6地址进行网络通信
type:SOCK_STREAM 使用数据流进行通信 TCPSOCK_DGRAM 使用数据报通信 UDP
protocol:特殊的通信协议,一般不用,写0即可。
返回值:成功返回socket描述符,失败返回-1。通信地址:
// 基本地址
struct sockaddr {sa_family_t sa_family;  // 地址域 char        sa_data[14];
}// 本地类型地址
struct sockaddr_un{sa_family_t sun_family;  // 地址域 与domain一致即可char sun_path[108];     // socket文件的路径
};// 网络类型地址
struct sockaddr_in{sa_family_t sin_family;  // 地址域 与domain一致即可in_port_t sin_port;      // 端口号,注意要的是大端数据,2字节struct in_addr sin_addr; // ip地址
};// ip地址
struct in_addr {in_addr_t s_addr;  // ip地址的整数,注意要的是大端数据,4字节
};地址字节序转换成网络字节序:
uint32_t htonl(uint32_t hostlong);
功能:把地址字符序的4字节整数转换成网络字节序uint16_t htons(uint16_t hostshort);
功能:把地址字符序的2字节整数转换成网络字节序uint32_t ntohl(uint32_t netlong);
功能:把网络字节序的4字节整数转换成本地字节序uint16_t ntohs(uint16_t netshort);
功能:把网络字节序的2字节整数转换成本地字节序ip地址转换:
in_addr_t inet_addr(const char *cp);
功能:把点分十进制的ip地址字符串转换成网络字节序的4字节整数char *inet_ntoa(struct in_addr in);
功能:把以4字节整数形式的ip地址转换成点分十进制的ip地址字符串

基于TCP的编程模型:

服务端(等待连接的) 客户端(发起连接的) 函数
创建socket对象 创建socket对象 socket
准备地址(自己) 准备地址(服务端) sockaddr_in
地址与socket绑定 bind
监听并设置排除的数量 listen
等待连接 连接服务端 accept/connect
创建线程或进程给服务客户端 fork/pthread_create
收发数据 收发数据 read/write
关闭 关闭 close
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
功能:绑定地址域与socket对象
sockfd:socket对象描述符
addr:地址结构体指针,实际参数应该是 struct sockaddr_un* 或者 struct sockaddr_in* 因此需要强制类型转换。
addrlen:地址结构体的字节数,以此区别是什么类型地址。
返回值:成功返回0,失败返回-1。int listen(int sockfd, int backlog);
sockfd:socket对象描述符
backlog:待排队的数量
返回值:成功返回0,失败返回-1。int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
功能:用于接收连接的客户端
sockfd:socket对象描述符
addr:存储客户端的地址,实际参数应该是 struct sockaddr_un* 或者 struct sockaddr_in* 因此需要强制类型转换。
addrlen:即是输入也是输出输入:使用的是什么类型的地址结构接收的输出:实际接收到的地址结构类型
返回值:成返回与客户端建立连接的socet对象描述符,凭它收发数据,失败返回-1。

socket接口技术和相关函数(socket,bind,listen,accept)相关推荐

  1. 网络编程(基于socket接口技术的进程间通信)接上一篇文章补充

    目录 一.网络编程(基于socket接口技术) 1.基于TCP协议的网络通信 编程模型: 2.基于UDP通信协议的网络通信 编程模型: 3.新增函数: 大小端数据转换函数: ip地址转换函数: TCP ...

  2. 网络编程(1)--socket/bind/listen/accept的简单介绍

    网络编程1--socket/bind/listen/accept的简单介绍 背景介绍 网络编程接口 socket bind listen accept 背景介绍 最近在学习APUE和Linux高性能服 ...

  3. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

  4. socket接口调用 java_Java中socket接口调用(示例代码)

    最近一个项目中接口通讯这一块主要是调用银联系统的socket接口,我方是客户端,即发送请求接收返回报文的一方.在贴代码之前,还是要了解一下关于socket的基础知识. Socket的基本概念 1.建立 ...

  5. socket接口详解

    socket接口详解 socket概述 接口详解 socket() bind() listen() accept() connect() send() recv() sendto() recvfrom ...

  6. 2-3 建立简易TCP服务端、客户端【socket server/client】【socket、bind、listen、accept、send、closesocket】【conect、recv】

    2-3 建立简易TCP服务端.客户端 文章目录 2-3 建立简易TCP服务端.客户端 0-前言 1-服务端简易功能 2-客户端简易功能 3-代码逻辑 4-服务端 4-1 建立socket 4-2 绑定 ...

  7. linux点对点聊天室的实现与设计心得,基于Socket接口的Linux与Windows网络聊天室设计与实现...

    陈洁 孟晓景 摘要:为了实现Linux与Windows跨平台通信,及时共享信息,构建了一个适用于跨平台的网络聊天室通信程序.先搭建跨平台通信环境,然后使用Socket套接字网络编程接口实现通信.整个系 ...

  8. 高级Socket编程技术

    高级Socket编程技术 实验目的 1.了解阻塞与非阻塞模式Socket编程的工作原理. 2.了解Socket编程的5种模型的工作原理和使用方法. 3.掌握Select模型和WSAAsyncSelec ...

  9. Linux Socket接口使用方法

    Linux内核net/socket.c定义了一套socket的操作api.图1展示了socket层所处与TCP/IP协议栈之上和应用层之下. socket()函数 socket函数对应于普通文件的打开 ...

最新文章

  1. Linux调优方案,sysctl.conf的设置
  2. 英特尔在中国投资55亿美元非易失性存储项目投产
  3. 《X86汇编语言:从实模式到保护模式》读书笔记之引言
  4. python装饰器性能_python装饰器的特性原理详解
  5. python pipeline框架_爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline|python基础教程|python入门|python教程...
  6. blockquote 和 q 标签 css样式
  7. FreeRTOS介绍与移植
  8. php 获取数组第一个元素的几种方法
  9. Axure原型设计工具--产品经理必备
  10. Camera Link相机接口
  11. R语言使用dplyr包计算dataframe分组聚合样本独特值个数、计数个数、四分位距IQR
  12. 游戏本自动掉帧_玩游戏掉帧怎么办?
  13. uni-app真机调试链接不上网易im服务器
  14. speedoffice中Word如何拆分单元格
  15. c语言学习-判断一个数是否能被3整除
  16. DeepDive教程第一部分
  17. 一键重装系统win7教程
  18. 2021年第16届首尔国际电视节圆满落幕
  19. 如何进行区块链的开发?
  20. 程序员的鄙视链-------哈哈哈,真逗

热门文章

  1. 002 - new javascript 基础
  2. linux图像编辑,Photoflare:Linux下简单的开源图像编辑器
  3. java工具封装树形对象,常用于菜单 json树逆向生成list集合
  4. 【Python】pywin32实用小记|pywin32操作QQ聊天窗口爆破PS学姐
  5. 遍历HashMap的几种方法
  6. 关于短网址短链接生成的算法问题
  7. Java——entity(实体类)的写法规范
  8. java高级架构师工资多少啊,附源代码
  9. Dev C++ 运行出现:源文件未编译
  10. 移动云品牌焕新,全新LOGO全新启航!