
在计算机网络的编程中,OSI参考模型中规定了各层的定义与功能。针对于其中的网络层,传输层,以及应用层这三层,整体称之为网络协议栈,常见有PC平台的TCP/IP,嵌入式平台的lwIP,CycloneTCP等。
关于数据链路层和物理层,这是硬件层面的协议,由网卡和MAC/LLC去实现。
本文中的TCP server 和 client,为基于软件层面(TCP/IP协议栈)的Socket应用开发。
1 Socket
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。
数据结构:注意sockaddr_in 和 sockaddr的区别(前者具体,后者抽象)
#ifdef CONFIG_NET_IPv6
函数接口:
int 2 TCP 与 UDP
TCP(Transmission Control Protocol,传输控制协议)是面向连接的,基于数据流的可靠协议,在正式通信之前必须建立起连接。UDP(User Data Protocol,用户数据报协议)是一个非连接的数据报协议。TCP的服务器模式比UDP的服务器模式多了listen,accept函数。TCP客户端比UDP客户端多了connect函数。
这里只谈TCP的客户端与服务器。
3 TCP server
TCP server的实现流程:
1、创建一个socket,用函数socket();
2、绑定IP地址、端口等信息到socket上,用函数bind();
3、开启监听,用函数listen();
4、接收客户端上来的连接,用函数accept();
5、收发数据,用函数send()和recv(),或者read()和write();
6、关闭网络连接;
#include 4 TCP client
TCP client的实现流程:
1、创建一个socket,用函数socket();
2、连接服务器,用函数connect();
3、收发数据,用函数send()和recv(),或者read()和write();
4、关闭网络连接;
#include 5 测试
1、使用gcc 分别编译源文件(gcc -o 可直接输出可执行文件)


2、运行server

3、3次运行client


6 总结
本文只实现了客户端的单向发送功能,没有实现接收功能。另外服务端也只对单个连接进行处理,但是,服务器应该具备高并发,处理大量socket连接的能力。一般可通过多线程以及I/O复用(select,poll,epoll)的方法来实现高并发。