在Linux上创建TCP Socket和Unix Domain Socket(也称为Domain Socket)涉及到使用socket系统调用和相关的网络编程库。以下是对这两者的创建过程的详细介绍:
在Linux中创建TCP Socket的一般步骤如下:
包含头文件: 在你的C程序中,首先需要包含一些头文件,其中包括 <sys/socket.h>
和 <netinet/in.h>
。
#include <sys/socket.h>
#include <netinet/in.h>
创建Socket: 使用socket系统调用创建一个套接字。
int server_socket = socket(AF_INET, SOCK_STREAM, 0);
这里,AF_INET
表示使用IPv4地址,SOCK_STREAM
表示创建一个面向连接的TCP Socket。
配置Socket地址结构: 设置服务器地址和端口等信息。
struct sockaddr_in server_address;
server_address.sin_family = AF_INET;
server_address.sin_port = htons(8080); // 选择一个合适的端口
server_address.sin_addr.s_addr = INADDR_ANY;
绑定Socket: 将套接字绑定到指定的地址和端口。
bind(server_socket, (struct sockaddr*)&server_address, sizeof(server_address));
监听连接: 开始监听连接请求。
listen(server_socket, 5); // 允许最大连接数为5
接受连接: 当有客户端连接请求时,使用accept
函数接受连接。
int client_socket = accept(server_socket, NULL, NULL);
client_socket
就是与客户端通信的套接字。
Unix Domain Socket是在本地计算机上进行通信的一种方式。以下是创建Unix Domain Socket的步骤:
包含头文件: 在你的C程序中,首先需要包含 <sys/socket.h>
和 <sys/un.h>
头文件。
#include <sys/socket.h>
#include <sys/un.h>
创建Socket: 使用socket系统调用创建Unix Domain Socket。
int server_socket = socket(AF_UNIX, SOCK_STREAM, 0);
这里,AF_UNIX
表示使用Unix域地址,SOCK_STREAM
表示创建一个面向连接的Socket。
配置Socket地址结构: 设置Unix Domain Socket的路径。
struct sockaddr_un server_address;
server_address.sun_family = AF_UNIX;
strcpy(server_address.sun_path, "/tmp/my_socket");
这里/tmp/my_socket
是Unix Domain Socket的路径。
绑定Socket: 将套接字绑定到指定的地址。c听连接:** 开始监听连接请求。
listen(server_socket, 5); // 允许最大连接数为5
接受连接: 当有客户端连接请求时,使用accept
函数接受连接。
int client_socket = accept(server_socket, NULL, NULL);
client_socket
就是与客户端通信的套接字。
这两种套接字的创建过程基本上是类似的,主要区别在于地址结构的设置和socket类型的选择。