unix c 10
网络常识:
OSI 7层模型 TCP模型
IP和端口
IP是用来定位网络中的计算机,端口用来代表 计算机中的某个进程。
IP 有点分十进制 和 十六进制的两种表示方式,底层 十六进制的 整数,点分十进制是给 人类使用。
IP地址分为A、B、C、D 4类。
查看IP地址的命令:
Windows Dos -> ipconfig
Unix/Linux -> ifconfig
查看网络是否通畅:ping IP地址
子网掩码用于 判断是否同一网段。
166.111.160.1
255.255.254.0
-----------------
166.111.160.0
166.111.161.45
255.255.254.0
—————————
166.111.160.0
子网掩码:255.255.254.0
端口 的整数 0-65535,但不是都能使用。
0-1023 都被系统占用(不是全部)
80 http
21 ftp
23 telnet
1024-48XXX 可以使用,其中有一些会被某些软件占有
48XXX以后不要使用,系统会随时调用,不稳定端口
网络编程需要使用IP+端口。
socket网络编程
socket 叫套接字
由于网络出现时间非常长,因此socket编程比较成熟。
socket编程 支持 TCP和UDP传输。
可以做一对一通信,也可以做一对多通信。
一对多 必然会启动多进程或多线程(更常用)。
socket编程 也支持 本地的进程间通信(不常用)。
1 写一个socket的本地通信(IPC)
1.1 服务端
1) 创建一个socket,调函数socket()
int socket(int domain,int type,int protocol)
返回一个 socket的描述符,和文件描述符一样。
失败返回 -1.
domain: 域,用来选择协议簇/协议族(不专业)
用来指明 是本地通信还是网络通信
PF_UNIX PF_LOCAL PF_FILE 都是本地通信
PF_INET 网络通信
PF_INET6 IPV6的网络通信(较少使用)
所有 的PF 换成 AF 效果一样,都是一个数。
type: 用来选择通信类型(TCP还是UDP)
SOCK_STREAM - 数据流,就是用TCP
SOCK_DGRAM - 数据报,就是用UDP
protocol参数已经失去作用,给0即可。
2) 准备通信地址
通信地址 包括3个结构体(历史)。
sockaddr 负责做参数,不需要直接使用。
sockaddr_un 存储本地通信的地址信息,需要
sys/un.h头文件。
sockaddr_in 存储网络通信的地址信息,需要netinet/in.h头文件。
struct sockaddr_un{
int sun_family; //协议簇,与socket呼应
char sun_path[];//做媒介的socket文件
};
struct sockaddr_in{
int sin_family;//协议簇
short sin_port;//端口
struct in_addr sin_addr;//IP地址结构体
};
3) 绑定通信地址和socket描述符
bind(int sockfd,addr,addrlen);
4) 通信(read/write),和文件一样
5) close
1.2 客户端
与服务端一样,只有第三步bind函数换成connect()即可。
注: 服务端和客户端的读写要保持交互次序。
1 写一个socket的网络通信(一对一)
代码步骤与上面基本一致,通信地址换成sockaddr_in即可。其中,ip和端口都需要转换。
ip需要把点分十进制转成十六进制格式,函数:
inet_addr()
端口需要把本机格式转成网络格式,函数:
htons()
TCP之 一对多开发:
服务端:
1 创建socket,调 socket函数,用来做 等待客户端的连接,不用于 信息交互。
2 准备通信地址,一样(sockaddr_in)
3 绑定 bind
4 监听 listen(sockfd,int 最大并行连接数)
5 等待客户端的连接,连接成功后 返回一个新的socket描述符 用于信息交互。函数:accept()
6 读写数据
7 关闭连接。
客户端没有变化。
关于accept()
第一个参数是第一步的sockfd,
第二个参数是用于存放连接客户端通信地址的结构体指针
第三个参数必须传入通信地址的大小并传出实际的大小。
返回一个 新的socket描述符,专门用于信息的交互,失败返回-1.
tcp协议和udp协议
都是 传输层的协议,
TCP是面向连接的协议,是可靠的
需要保持连接,重发一切错误数据
UDP 无连接协议,不可靠的
不需要保持连接,不重发错误数据
TCP 占内存比较多,效率偏低,
UDP 占内存比较少,效率较高
UDP编程有 专门的数据发送和接收函数:
sendto()/recvfrom()
unix c 10的更多相关文章
- C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式
C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式 置顶 2018年03月06日 19:16:51 黎筱曦 阅读数:19098 标签: C#时间 更多 个人 ...
- Kernighan《UNIX 传奇:历史与回忆》杂感
Brian W. Kernighan 是一个伟大的技术作家,我买了他写的几乎所有书.他近些年的书我买的是 Kindle 电子版,不占地方. 以下是我手上保存的纸版书: Kernighan 的书大多与别 ...
- 转:值得推荐的C/C++框架和库(真的很强大)
目录(?)[+] 值得学习的C语言开源项目 - 1 Webbench - 2 Tinyhttpd - 3 cJSON - 4 CMockery - 5 Libev - 6 Memcached - 7 ...
- Oracle监控代理安装ITM(IBM Tivoli Monitoring)
1 监控代理安装 2 1.1 安装 2 1.1.1 解压安装包 2 1.1.2 安装 2 1.2 配置 5 1.2.1 给Agent授权 5 1.2.2 配置Oracle Agent 10 目录 1 ...
- 嵌入式 十个最值得阅读学习的C开源项目代码
开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...
- LINUX系统全部参数 sysctl -a + 网络参数设置
http://blog.lifeibo.com/?p=380 1.sysctl sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中 [root@ser ...
- moment.js 学习笔记
一.安装 / 使用 npm install moment 注:使用版本为 2.22.2 var moment = require('moment'); moment().format(); // 20 ...
- Oracle11g ADG环境实施文档-1204
Oracle11g adg 环境搭建实施手册-1204 2017年8月30日 9:16 11g adg 环境搭建实施手册-0824 2017年8月24日 10:18 ################# ...
- Fusion-io ioDrive Duo Enterprise PCIe Review
原文地址:http://www.storagereview.com/fusionio_iodrive_duo_enterprise_pcie_review As part of StorageRevi ...
随机推荐
- HDU5584 LCM Walk 数论
LCM Walk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- 算法导论(第三版)Exercises2.1(插入排序、线性查找、N位大数相加)
关于练习程序的说明参见置顶的那篇. 2.1-1: 31 41 59 26 41 58 31 41 59 26 41 58 31 41 59 26 41 58 26 31 41 59 41 58 26 ...
- html5 750 REM JS换算方法
在安卓手机低版本浏览器,如果进页面快速执行的话会出现计算宽度不正确的情况,解决方法是放在onload方法里面执行,但这种解决方式在一些高版本浏览器中会出现页面闪动,所以使用判断浏览器版本的方式来解决, ...
- vbox下centos安装增加功能失败
一般都是:unable to find the sources of your current Linux kernel. 先尝试这个吧:yum install kernel kernel-heade ...
- AngularJs学习笔记4——四大特性之双向数据绑定
双向数据绑定 方向1:模型数据(model)绑定到视图(view) 实现方法:①.{{model变量名}} ②.常用指令(ng-repeat) 方向2:将视图(view)中用户输入的数据绑定到模型数 ...
- Servlet实现文件的下载
(1)项目的主文件夹例如以下:(演示出image和servlet的位置所在) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc= ...
- Visual Studio 2010 中的 Web 开发
概述 Microsoft Visual Studio 2010 为 ASP.NET Web 应用程序的开发提供非常多新的功能.这些新功能旨在帮助开发者高速方便地创建和部署质量高且功能全的 Web 应用 ...
- Android ActionBar详解(二):ActionBar实现Tabs标签以及下拉导航
一.添加标签 Tabs 在ActionBar中实现标签页可以实现android.app.ActionBar.TabListener ,重写onTabSelected.onTabUnselected ...
- compareTo简介
compareTo()方法是用来比较字符串大小,该方法用来判断一个字符串是大于,等于还是小于另一个字符串.判断字符串大小的依据是根据他们在字典中的顺序决定的 语法 Str1.compareTo(Str ...
- JavaScript学习笔记之 数组方法一 堆栈 和队列
数组的方法 以及 堆栈的操作的方法 JavaScript是一种弱类型语言,不像其它程序语言需要严格定义数据类型.在JavaScript中数组可以任意修改变动,这样也就出现了一个问题,如果边遍历数组边操 ...