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协议的网络程序
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”就会显示行号。