Q:套接字特点

A:管道,消息队列,信号量,共享内存这些通信机制只能允许同一计算机上运行的进程相互通信,而套接字不仅可以提供在同一计算机上的进程间通信,还可以提供不同计算机上的进程间通信。

服务器端:

创建套接字描述符->将套接字与地址关联->监听套接字->接受链接

客服端:

创建套接字描述符->发起链接

创建套接字描述符

int socket(int domain, int type, int protocol);

domain:    通信特点,如AF_INET,IPv4因特网域

type:    套接字类型,如SOCK_STREAM字节流,SOCK_DGRAM数据报

type参数与下面标志相与:

SOCK_NONBLOCK创建非阻塞的socket

SOCK_CLOEXEC fork调用创建子进程时,子进程关闭该socket

protocol:    通常是0,选择默认协议。如果domain和type支持多个协议是,可以用

protocol指定一个特点的协议。

将套接字与地址关联

int bind(int sockfd, const struct sockaddr *addr, socklen_t len);

将一个客户端的套接字关联上一个地址没有意义,可以让系统选一个默认的地址。所以如果调用connect或listen,但是没有将地址绑定到套接字上,系统会选一个地址绑定到套接字上。但是服务器端需要绑定一个地址,让客户端可以指定连接地址。

addr限制:

  1. 指定地址必须有效,端口号不能被占用,IP地址和计算机IP地址吻合
  2. 地址必须与创建套接字是的地址组协议相匹配
  3. 只能将一个套接字绑定到一个地址上

发起链接

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

如果用SOCK_DGRAM套接字调用connect,传送报文的目标会设置成connect调用中指定的地址,这样每次传送报文时就不用再提供地址额

监听套接字

int listen(int sockfd, int backlog);

服务器调用listen宣告它愿意接受连接请求

参数backlog仅作为一个提示,提示系统该进程所要入队的未完成链接请求数量,其实际值由系统决定。

接受链接

int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict len);

函数accept返回一个套接字描述符,该描述符连接到客户端,和原始套接字sockfd需要区分开来。如果不关心客户端标识,可以将参数addr和len设为NULL。

调用accept前,将addr参数设为足够大的缓冲区用来存放地址,len设为缓存区大小

返回时,accept会在缓冲区填充客户端的地址,并且更新len

套接字API的更多相关文章

  1. Java13新特性 -- 重新实现旧版套接字API

    全新实现的 NioSocketImpl 来替换JDK1.0的PlainSocketImpl. 它便于维护和调试,与 NewI/O (NIO) 使用相同的 JDK 内部结构,因此不需要使用系统本地代码. ...

  2. 《Unix网络编程》卷一(简介TCP/IP、基础套接字编程)

    通常说函数返回某个错误值,实际上是函数返回值为-1,而全局变量errno被置为指定的常值(即称函数返回这个错误值). exit终止进程,Unix在一个进程终止时总是关闭该进程所有打开的描述符. TCP ...

  3. 【unix网络编程第三版】阅读笔记(二):套接字编程简介

    unp第二章主要将了TCP和UDP的简介,这些在<TCP/IP详解>和<计算机网络>等书中有很多细致的讲解,可以参考本人的这篇博客[计算机网络 第五版]阅读笔记之五:运输层,这 ...

  4. UNP学习笔记(第三章:套接字编程简介)

    本章开始讲解套接字API. 套接字地址结构 IPv4套接字地址结构 它以sockaddr_in命名,下面给出它的POSIX定义 struct in_addr { in_addr_t s_addr; } ...

  5. windows下的套接字IO模型

    一般情况下,IO操作的行为受两种因素的影响: IO操作对象的类型(阻塞还是非阻塞) 获取IO操作结果的方式(同步还是异步). 同步就是指操作的发起和操作结果的获取由调用者完成. 异步指操作发起由调用方 ...

  6. 伯克利套接字(BSD Socket)

    http://blog.csdn.net/blueman2012/article/details/6693605#socket.28.29 伯克利套接字(Berkeley sockets),也称为BS ...

  7. 套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构/新通用套接字地址结构

    IPv4套接字地址结构通常也称为“网际套接字地址结构”,它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t ...

  8. 计算机网络:套接字(Socket)| Python socket实现服务器端与客户端通信,使用TCP socket阿里云ECS服务器与本机通信

    所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象.一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制.从所处的地位来讲,套接字上联应 ...

  9. Linux网络通信(TCP套接字编写,多进程多线程版本)

    预备知识 源IP地址和目的IP地址 IP地址在上一篇博客中也介绍过,它是用来标识网络中不同主机的地址.两台主机进行通信时,发送方需要知道自己往哪一台主机发送,这就需要知道接受方主机的的IP地址,也就是 ...

随机推荐

  1. md5加密用户登陆遇到的问题及解决办法

    有个项目的登陆模块使用到了cas,应需求要求,用户名和密码传输时使用了md5加密模式,加密的密码可以直接保存在数据库,但是加密的用户名则必须解密出来才行,于是后台的java代码中便写了针对用户名的解密 ...

  2. HashMap和Hashtable的异同点

    HashMap和Hashtable的异同点 不同点: 1.HashMap的父类是AbstractMap,而Hashtable的父类是Dictiionary: 2.HashMap的key和value可以 ...

  3. Excel 2010高级应用-面积图(三)

    Excel 2010高级应用-面积图(三) 操作过程如下: 1.新建Excel空白文档,重新命名为面积图 2.单击"插入",找到面积图图样 3.选择其中一种类型的面积图,单击并在空 ...

  4. OpenGL结合C#进行绘图

    转自:http://www.cnblogs.com/wangshide/archive/2012/04/14/2447499.html 本人对OpenGL产生了浓厚的兴趣,又想学习一下C#这个语言,就 ...

  5. java web面试题

    java web面试题 第1题.  编写一个Filter,需要() A.  继承Filter 类 B.  实现Filter 接口 C.  继承HttpFilter 类 D.  实现HttpFilter ...

  6. java.lang.NullPointerException: No FileItemFactory has been set.

    1.错误描述 java.lang.NullPointerException: No FileItemFactory has been set. at org.apache.commons.fileup ...

  7. OpenCV实现图像上添加汉字 转

    <span style="font-size:18px;">void GetStringSize(HDC hDC, const char* str, int* w, i ...

  8. [Luogu4174][NOI2006]最大获益

    luogu sol 一周没摸键盘了回来刷刷水题练练手感 显然,最大化收益可以转化为最小化损失,从而建立最小割模型. 记\(tot=\sum_{i=1}^{m}C_i\),事先假设所有的获益都得到了,那 ...

  9. [.NET Core] 简单读取 json 配置文件

    简单读取 json 配置文件 背景 目前发现网上的 .NET Core 读取配置文件有点麻烦,自己想搞个简单点的. .NET Core 已经不使用之前的诸如 app.config 和 web.conf ...

  10. Django入门-通用视图

    文档:https://docs.djangoproject.com/en/1.11/topics/class-based-views/ from django.shortcuts import get ...