2.2 TCP/IP协议基础

TCP/IP协议基础
                                                                          Linux系统编程--> TCP/IP协议基础

socket编程 

1.TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和
链路层(Link)四层。

2. socket地址的数据类型及相关函数
底层网络协议:IPv4、IPv6
IPv4和IPv6的地址格式定义在 netinet/in.h 中
IPv4地址用sockaddr_in结构体表示, 包括16位端口号和32位IP地址
IPv6地址用sockaddr_in6结构体表示,包括16位端口号、128位IP地址和一些控制字段
本节只介绍基于IPv4的socket网络编程

3.基于TCP协议的网络程序
2.2 TCP/IP协议基础
  TCP协议通讯流程 
  阶段一:建立连接(三方握手)
     阻塞:    服务器端-->accept()   客户端-->connect()
     客户端/服务器程序的流程是由客户端主动发起请求,服务器被动处理请求,一问一答的方式

  阶段二:数据传输
  服务器端:
     阻塞:    服务器端和客户端-->read()

4.TCP网络程序(例程)
  server.c         --> 从客户端读字符,然后将每个字符转换为大写并回送给客户端  
  重点:while死循环 --> 每次循环处理一个客户端连接

  client.c         --> 从命令行参数中获得一个字符串发给服务器,然后接收服务器返回的字符串并打印
  客户端不需要固定的端口号,客户端的端口号由内核自动分配。
  重点:  void *receive_fn(void *arg) --> while死循环

5.pthread多线程编程的学习小结
  关于编译时出现 对‘pthread_create’未定义的引用 之类的错误的解决:
  例如:
  [email protected]:/code/pthreadid# gcc sample.c
  /tmp/cc1WztL9.o: In function `main’:
  sample.c:(.text+0×83): undefined reference to `pthread_create’
  collect2: ld returned 1 exit status

  [email protected]:/code/pthreadid# gcc -lpthread sample.c             --> a.out
  还可以这样                    gcc thread.c -o thread -lpthread   --> thread.out

6.Linux下多个.c文件的编译和Makefile文件
6.1 在没有Makefile文件的情况下:
    写好.c文件和.h文件

    程序编辑完成之后,需要编译链接:
    我们可以用gcc编译每个.c文件。
    如果有三个.c文件a.c、b.c、c.c,编译方法如下:
    gcc  a.c  –o  a.o             //将三个.c文件编译成.o文件
    gcc  b.c  -o  b.o
    gcc  c.c  -o  c.o
    gcc  a.o  b.o  c.o  –o  all   //将三个.o文件编译成一个可执行文件
    ./all                          //执行程序  
    注意:先分别编译,再把3个一起编译生成all.o文件

6.2 有Makefile文件的情况下:
    编译和执行(make:编译,   ./all:执行)
    注意:直接在命令行输入  make  即可

7.  secureCRT使用的命令 
    :set nu  
   显示行号 vi浏览某个文件的内容,进去后直接输入“:set nu”就会显示行号。