Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。即Socket提供了操作上述特殊文件的接口,使用这些接口可以实现网络编程。
Socket通信流程图
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在正式通信之前必须建立起连接。UDP(User Data Protocol,用户数据报协议)是一个非连接的协议。因此TCP的服务器模式比UDP的服务器模式多了listen,accept函数。TCP客户端比UDP客户端多了connect函数。这里着重介绍TCP下socket简单编程。
一、TCP使用Socket创建客户端(Client)
(1)创建一个socket,用函数socket();
导入需要的头文件:
#include <sys/types.h> #include <sys/socket.h>
声明
int socket(int domain, int type, int protocol);
参数说明:
1)domain
Name | Purpose |
AF_UNIX, AF_LOCAL | Local communication |
AF_INET | IPv4 Internet protocols |
AF_INET6 | IPv6 Internet protocols |
AF_IPX | IPX - Novell protocols |
AF_NETLINK | Kernel user interface device |
AF_X25 | ITU-T X.25 / ISO-8208 protocol |
AF_AX25 | Amateur radio AX.25 protocol |
AF_ATMPVC | Access to raw ATM PVCs |
AF_APPLETALK | AppleTalk |
AF_PACKET | Low level packet interface |
AF_ALG | Interface to kernel crypto API |
(2)连接服务器,用函数connect();
(3)收发数据,用函数send()和recv(),或者read()和write();
(4)关闭网络连接。
二、TCP使用Socket创建服务端(Server)
(1)创建一个socket,用函数socket();
(2)绑定IP地址、端口等信息到socket上,用函数bind();
(3)开启监听,用函数listen();
(4)接收客户端上来的连接,用函数accept();
(5)收发数据,用函数send()和recv(),或者read()和write();
(6)关闭网络连接;
(7)关闭监听。