Socket 编程是计算机网络编程中的一个重要技术,它允许两个或多个进程在不同的计算机上进行通信。Socket 编程基于 Berkeley 套接字 API,该 API 定义了一组用于创建和管理套接字的函数。套接字本质上是端点,允许进程通过网络发送和接收数据。
有两种主要的 socket 类型:
Socket 编程通常涉及以下步骤:
socket()
函数创建一个套接字。套接字类型由第一个参数指定,第二个参数指定通信协议。
bind()
函数将套接字绑定到特定的 IP 地址和端口号。这指定了套接字将在哪个网络地址上监听。
listen()
函数监听传入的连接。这使套接字处于等待状态,等待客户端连接。
accept()
函数接受连接。这将创建与客户端通信的新的已连接套接字。
send()
和
recv()
函数在已连接的套接字之间发送和接收数据。数据可以通过字节块、字符串或其他格式发送。
close()
函数关闭套接字。这将释放与套接字关联的资源。
以下是一个简单的 C 语言示例,演示了如何创建客户端和服务器 socket 并交换消息:
includeinclude include include int main() {int client_socket;struct sockaddr_in Server_address;// 创建套接字client_socket = socket(AF_INET, SOCK_STREAM, 0);if (client_socket < 0) {perror("socket() failed");exit(EXIT_FAILURE);}// 设置服务器地址server_address.sin_family = AF_INET;server_address.sin_port = htons(9000);server_address.sin_addr.s_addr = inet_addr("127.0.0.1");// 连接到服务器if (connect(client_socket, (struct sockaddr ) &server_address, sizeof(server_address)) < 0) {perror("connect() failed");exit(EXIT_FAILURE);}// 发送消息char message[] = "Hello from client";if (send(client_socket, message, strlen(message), 0) < 0) {perror("send() failed");exit(EXIT_FAILURE);}// 接收消息char buffer[1024];if (recv(client_socket, buffer, sizeof(buffer), 0) < 0) {perror("recv() failed");exit(EXIT_FAILURE);}printf("Received from server: %s\n", buffer);// 关闭套接字close(client_socket);return 0; }
includeinclude include include int main() {int server_socket, client_socket;struct sockaddr_in server_address, client_address;int client_address_length = sizeof(client_address);// 创建套接字server_socket = socket(AF_INET, SOCK_STREAM, 0);if (server_socket < 0) {perror("socket() failed");exit(EXIT_FAILURE);}// 设置服务器地址server_address.sin_family = AF_INET;server_address.sin_port = htons(9000);server_address.sin_addr.s_addr = INADDR_ANY;// 绑定套接字if (bind(server_socket, (struct sockaddr ) &server_address, sizeof(server_address)) < 0) {perror("bind() failed");exit(EXIT_FAILURE);}// 监听套接字if (listen(server_socket, 5) < 0) {perror("listen() failed");exit(EXIT_FAILURE);}// 接受连接client_socket = accept(server_socket, (struct sockaddr ) &client_address, &client_address_length);if (client_socket < 0) {perror("accept() failed");exit(EXIT_FAILURE);}// 接收消息char buffer[1024];if (recv(client_socket, buffer, sizeof(buffer), 0) < 0) {perror("recv() failed");exit(EXIT_FAILURE); }printf("Received from client: %s\n", buffer);// 发送消息char message[] = "Hello from server";if (send(client_socket, message, strlen(message), 0) < 0) {perror("send() failed");exit(EXIT_FAILURE);}// 关闭套接字close(client_socket);close(server_socket);return 0; }
Socket 编程中可能有以下常见的错误:
Socket 编程是一种用于在不同计算机上的进程之间进行通信的基本技术。理解套接字的类型、编程步骤和常见错误对于编写健壮可靠的网络应用程序至关重要。
本文地址:https://www.qianwe.com/article/b129686b4142532c0576.html
上一篇:C语言视频教程下载掌握编程基础,提升技能C语...
下一篇:io编程一种使用inputoutput操作与外部设备...