网络常识:
   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的更多相关文章

  1. C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式

    C#关于时间(获取特定格式的时间及多种方式获取当前时间戳)以及10位和13位时间戳转为特定格式 置顶 2018年03月06日 19:16:51 黎筱曦 阅读数:19098 标签: C#时间 更多 个人 ...

  2. Kernighan《UNIX 传奇:历史与回忆》杂感

    Brian W. Kernighan 是一个伟大的技术作家,我买了他写的几乎所有书.他近些年的书我买的是 Kindle 电子版,不占地方. 以下是我手上保存的纸版书: Kernighan 的书大多与别 ...

  3. 转:值得推荐的C/C++框架和库(真的很强大)

    目录(?)[+] 值得学习的C语言开源项目 - 1 Webbench - 2 Tinyhttpd - 3 cJSON - 4 CMockery - 5 Libev - 6 Memcached - 7 ...

  4. 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  ...

  5. 嵌入式 十个最值得阅读学习的C开源项目代码

    开源世界有许多优秀的开源项目,我选取其中十个最优秀的.最轻量级的C语言的项目,希望可以为C语言开发人员提供参考. 十个最值得阅读学习的C开源项目代码 1. Webbench 2. Tinyhttpd ...

  6. LINUX系统全部参数 sysctl -a + 网络参数设置

    http://blog.lifeibo.com/?p=380 1.sysctl sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中 [root@ser ...

  7. moment.js 学习笔记

    一.安装 / 使用 npm install moment 注:使用版本为 2.22.2 var moment = require('moment'); moment().format(); // 20 ...

  8. Oracle11g ADG环境实施文档-1204

    Oracle11g adg 环境搭建实施手册-1204 2017年8月30日 9:16 11g adg 环境搭建实施手册-0824 2017年8月24日 10:18 ################# ...

  9. Fusion-io ioDrive Duo Enterprise PCIe Review

    原文地址:http://www.storagereview.com/fusionio_iodrive_duo_enterprise_pcie_review As part of StorageRevi ...

随机推荐

  1. 深入super,看Python如何解决钻石继承难题

    1.   Python的继承以及调用父类成员 python子类调用父类成员有2种方法,分别是普通方法和super方法 假设Base是基类 class Base(object): def __init_ ...

  2. 基于控制权限和登录验证跳转的django登录界面的实现

    django框架提供了出去登录和退出系统的login和logout的视图函数,本实现中使用系统自带的是视图函数.需要在settings.py,urls.py,views.py和模板文件等几个方面进行考 ...

  3. php中strstr、strrchr、substr、stristr四个函数的区别总结

    php中strstr.strrchr.substr.stristr四个函数的区别总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-09-22我要评论 这篇文章主要介绍了php ...

  4. Wince修改系统时间问题

           当我们需要修改到系统时间的时候,需要用到下面四个函数:SetLoaclTime,GetLocalTime,SetSystemTime,GetSystemTime.这四个函数是用来修改或者 ...

  5. HDU 2845 Beans (DP)

    Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled ...

  6. Live555 实战之框架简单介绍

    作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 上一篇文章简要介绍了怎样以共享库的方式交叉编译Live555,今天再来介绍live源代码框架. 先 ...

  7. 奔五的人学IOS:swift练手与csdn,最近学习总结

    早在五月份就准备開始学习ios开发,当时还是oc,学习了几天,最终不得其法.到了ios8开放,再加swift的出现.从10月份開始.最终找到了一些技巧,学习起来还算略有心得. 今天把我在学习swift ...

  8. Android ActionBar详解(一):ActionBar概述及其创建

    在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个重要的内容,Action Bar主要是用于代替传统的标题栏,对于Android平板设备来说屏幕更大它的标题使 ...

  9. wlan0 Interface doesn't support scanning : Device or resource busy

    Problem: wlan0 Interface doesn't support scanning : Device or resource busy. Solved Way: sudo ifcong ...

  10. 理清fineuploader无刷新上传的一些事

    1.fineuploader是一款不依赖与jquery的异步无刷新上传组件,fineuploader采用ajax方式实现对文件上传,返回值都是以json的格式,对后台服务器操作和前端dom对象一些操作 ...