Linux网络编程 之 套接字(四)
目录
1. 套接字的定义
2. 套接字的创建方法
3. 套接字的地址
- 本地套接字
- 网络套接字
1. 套接字的定义
套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信。我们可以用套接字中的相关函数来完成通信过程。
2. 套接字的创建方法
#include <sys/socket.h>
int socket(int family,int type,int protocol);
参数:
family:协议族
指定套接字通信中使用的网络介质,最常见的套接字域是 AF_UNIX 和 AF_INET。
AF_UNIX用于通过 Unix 和 Linux 文件系统实现的本地套接字
AF_INET用于 Unix 网络套接字。AF_INET 套接字可以用于通过包括因特网在内的 TCP/IP 网络进行通信的程序。
type:套接字类型
流套接字(SOCK_STREAM):
流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
数据报套接字(SOCK_DGRAM):
数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
原始套接字(SOCK_RAW):
原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。
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网络编程 之 套接字(四)相关推荐
- Linux网络编程——原始套接字编程
Linux网络编程--原始套接字编程 转自:http://blog.csdn.net/tennysonsky/article/details/44676377 原始套接字编程和之前的 UDP 编程差不 ...
- Linux网络编程之套接字基础
Linux网络编程之套接字基础 1.套接字的基本结构 struct sockaddr 这个结构用来存储套接字地址. 数据定义: struct sockaddr { unsigned short sa_ ...
- linux网络编程 华清,Linux网络编程之套接字
一 :套接字属性 套接字由域(domain),类型(type)和协议(protocol)三个属性确定其特性. 1)套接字的域 域指定套接字通信中使用的网络 介质,常见的套接字域是AF_INET,它指的 ...
- [Linux网络编程]Socket套接字
socket 的原意是"插座",在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式. 通过 socket 这 ...
- 【Linux网络编程】套接字简介
00. 目录 文章目录 00. 目录 01. 概述 02. 套接字属性 03. socket函数 04. 套接字地址结构 05. 附录 01. 概述 Socket套接字由远景研究规划局(Advance ...
- 【Linux网络编程】套接字的介绍
套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信.我们可以用套接字中的相关函数来完成通信过程. 套接字的特性有三个属性确定,它们是:域(domain),类型( ...
- Linux网络编程(套接字编程)
socket套接字编程 udp协议与tcp协议区别 udp协议: udp协议:用户数据报协议 特性:无连接,不可靠,面向数据报 应用场景:实时性要求大于安全性(类似于短信发送)eg.视频传输 tcp协 ...
- Linux网络编程——原始套接字能干什么?
一.知识回顾: 通常情况下程序员接所接触到的套接字(Socket)为两类: (1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用: (2)数据报式 ...
- Linux 网络编程——原始套接字实例:MAC 地址扫描器
如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip.port.使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 ...
最新文章
- 模板 - DP动态规划
- oracle中的连接字符串
- 华为rh2285安装系统linux,华为2285h v5安装系统记
- win7下搭建手动转码服务器的安装配置tomcat、java、ffmpeg、hy_changsha、FTP
- QT的QDBusContext类的使用
- TrackViewState到底是干什么的
- openbsd 禁止root远程登陆
- matlab指定间隔符,在matlab中为.dat文件指定小数分隔符[复制]
- 【计算机网络】网络基础
- 音频编码解码器库 libZPlay
- 2018(上)C高级第0次作业
- Spring/SpringMVC在启动完成后执行方法
- Harmony OS — Image图片
- MyDiskTest v2.98-U盘扩容检测工具
- 通讯录管理系统(简洁版 课程设计)
- 多种CAML条件的查询
- 【SAP】 SAP自定义权限对象
- 什么?朋友圈出现了叠中叠?教你三招轻松应对朋友圈折叠
- html京东自动轮播,js 京东首页轮播图实现(透明度切换)
- Java项目:电影院售票管理系统(java+Servlet+JSP+JDBC+Mysql)
热门文章
- 动态语言和静态语言的比较
- scrapy去重原理,scrapy_redis去重原理和布隆过滤器的使用
- 设计模式:模板方法模式(Template Method)
- AOM Summit 来了
- AMD收购Xilinx、Zoom为全体用户提供端到端加密、Facebook云游戏、苹果搜索引擎等|Decode the Week...
- 【Workshshop No.3 | Kyligence X 青云QingCloud Workshop】零基础搭建云上大数据平台
- 浅谈缓存最终一致性的解决方案
- 腾讯iOA零信任安全——IT变革下的新一代企业网
- Kubernetes1.8.4安装指南 -- 1. 环境准备
- linux编译cmake