目录
1. 套接字的定义
2. 套接字的创建方法
3. 套接字的地址

  • 本地套接字
  • 网络套接字

1. 套接字的定义

套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信。我们可以用套接字中的相关函数来完成通信过程。

2. 套接字的创建方法

#include <sys/socket.h>
int socket(int family,int type,int protocol);

参数:

  1. family:协议族

    指定套接字通信中使用的网络介质,最常见的套接字域是 AF_UNIX 和 AF_INET。

    AF_UNIX用于通过 Unix 和 Linux 文件系统实现的本地套接字

    AF_INET用于 Unix 网络套接字。AF_INET 套接字可以用于通过包括因特网在内的 TCP/IP 网络进行通信的程序。

  2. type:套接字类型

    流套接字(SOCK_STREAM)

    流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

    数据报套接字(SOCK_DGRAM)

    数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。

    原始套接字(SOCK_RAW)

    原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。

  3. protocal:套接字协议

    协议类别(0、IPPROTO_TCP、IPPROTO_UDP等),设为 0 表示使用默认协议。

int socket(int family,int type,int protocol);该构造方法成功则返回一个套接字,失败子返回一个小于0的整数。

3. 套接字的地址

创建了一个套接字后,还必须进行绑定地址才能使用这个套接字。

本地套接字

对于本地套接字 AF_UNIX 来说,首先它的创建的域参数应该是PF_LOCAL或者PF_UNIX,而不能用PF_INET之类。本地套接字的通讯类型应该是SOCK_STREAM或SOCK_DGRAM,协议为默认协议。

创建套接字:

int sockfd;
sockfd = socket(PF_LOCAL, SOCK_STREAM, 0);

本地套接字的绑定的的地址是struct sockaddr_un结构,truct sockaddr_un结构有两个参数:sun_family、sun_path。sun_family只能是AF_LOCAL或AF_UNIX,而sun_path是本地文件的路径。

sockaddr_un结构体:

    struct sockaddr_un {  sa_family_t  sun_family; //套接字域  char         sun_path[]; //本地文件的路径  };  

套接字绑定地址:

    struct sockaddr_un sun;sun.sun_family = AF_LOCAL;strcpy(sun.sun_path, filepath);bind(sockfd, (struct sockaddr*)&sun, sizeof(sun));

网络套接字

而网络套接字AF_INET的结构由sockaddr_un 来描述:

     struct sockaddr_in {  short int  sin_family;          //套接字域  unsigned short int   sin_port;  //端口  struct in_addr   sin_addr;      //IP地址}  

IP 地址结构 in_addr 被定义如下:

     struct in_addr {  unsigned long int  }

Linux网络编程 之 套接字(四)相关推荐

  1. Linux网络编程——原始套接字编程

    Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...

  2. Linux网络编程之套接字基础

    Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...

  3. linux网络编程 华清,Linux网络编程之套接字

    一 :套接字属性 套接字由域(domain),类型(type)和协议(protocol)三个属性确定其特性. 1)套接字的域 域指定套接字通信中使用的网络 介质,常见的套接字域是AF_INET,它指的 ...

  4. [Linux网络编程]Socket套接字

    socket 的原意是"插座",在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式.     通过 socket 这 ...

  5. 【Linux网络编程】套接字简介

    00. 目录 文章目录 00. 目录 01. 概述 02. 套接字属性 03. socket函数 04. 套接字地址结构 05. 附录 01. 概述 Socket套接字由远景研究规划局(Advance ...

  6. 【Linux网络编程】套接字的介绍

    套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信.我们可以用套接字中的相关函数来完成通信过程. 套接字的特性有三个属性确定,它们是:域(domain),类型( ...

  7. Linux网络编程(套接字编程)

    socket套接字编程 udp协议与tcp协议区别 udp协议: udp协议:用户数据报协议 特性:无连接,不可靠,面向数据报 应用场景:实时性要求大于安全性(类似于短信发送)eg.视频传输 tcp协 ...

  8. Linux网络编程——原始套接字能干什么?

    一.知识回顾: 通常情况下程序员接所接触到的套接字(Socket)为两类: (1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用: (2)数据报式 ...

  9. Linux 网络编程——原始套接字实例:MAC 地址扫描器

    如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...

最新文章

  1. 模板 - DP动态规划
  2. oracle中的连接字符串
  3. 华为rh2285安装系统linux,华为2285h v5安装系统记
  4. win7下搭建手动转码服务器的安装配置tomcat、java、ffmpeg、hy_changsha、FTP
  5. QT的QDBusContext类的使用
  6. TrackViewState到底是干什么的
  7. openbsd 禁止root远程登陆
  8. matlab指定间隔符,在matlab中为.dat文件指定小数分隔符[复制]
  9. 【计算机网络】网络基础
  10. 音频编码解码器库 libZPlay
  11. 2018(上)C高级第0次作业
  12. Spring/SpringMVC在启动完成后执行方法
  13. Harmony OS — Image图片
  14. MyDiskTest v2.98-U盘扩容检测工具
  15. 通讯录管理系统(简洁版 课程设计)
  16. 多种CAML条件的查询
  17. 【SAP】 SAP自定义权限对象
  18. 什么?朋友圈出现了叠中叠?教你三招轻松应对朋友圈折叠
  19. html京东自动轮播,js 京东首页轮播图实现(透明度切换)
  20. Java项目:电影院售票管理系统(java+Servlet+JSP+JDBC+Mysql)

热门文章

  1. 动态语言和静态语言的比较
  2. scrapy去重原理,scrapy_redis去重原理和布隆过滤器的使用
  3. 设计模式:模板方法模式(Template Method)
  4. AOM Summit 来了
  5. AMD收购Xilinx、Zoom为全体用户提供端到端加密、Facebook云游戏、苹果搜索引擎等|Decode the Week...
  6. 【Workshshop No.3 | Kyligence X 青云QingCloud Workshop】零基础搭建云上大数据平台
  7. 浅谈缓存最终一致性的解决方案
  8. 腾讯iOA零信任安全——IT变革下的新一代企业网
  9. Kubernetes1.8.4安装指南 -- 1. 环境准备
  10. linux编译cmake