嵌入式开发学习———Linux环境下网络编程学习(一)
网络编程基础
网络编程的核心是通过套接字(Socket)实现进程间通信,分为TCP(可靠连接)和UDP(无连接)两种协议。TCP需建立连接,保证数据顺序和可靠性。
TCP服务器搭建(C语言)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int server_fd, new_socket;struct sockaddr_in address;int opt = 1;int addrlen = sizeof(address);char buffer[BUFFER_SIZE] = {0};// 创建套接字if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {perror("socket failed");exit(EXIT_FAILURE);}// 设置套接字选项if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) {perror("setsockopt");exit(EXIT_FAILURE);}address.sin_family = AF_INET;address.sin_addr.s_addr = INADDR_ANY;address.sin_port = htons(PORT);// 绑定端口if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {perror("bind failed");exit(EXIT_FAILURE);}// 监听连接if (listen(server_fd, 3) < 0) {perror("listen");exit(EXIT_FAILURE);}// 接受连接if ((new_socket = accept(server_fd, (struct sockaddr *)&address, (socklen_t*)&addrlen)) < 0) {perror("accept");exit(EXIT_FAILURE);}// 读取客户端数据read(new_socket, buffer, BUFFER_SIZE);printf("Message from client: %s\n", buffer);// 发送响应char *response = "Hello from server";send(new_socket, response, strlen(response), 0);printf("Response sent\n");close(new_socket);close(server_fd);return 0;
}
TCP客户端搭建(C语言)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>#define PORT 8080
#define BUFFER_SIZE 1024int main() {int sock = 0;struct sockaddr_in serv_addr;char buffer[BUFFER_SIZE] = {0};// 创建套接字if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {perror("socket creation error");exit(EXIT_FAILURE);}serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(PORT);// 转换IP地址为二进制格式if (inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr) <= 0) {perror("invalid address");exit(EXIT_FAILURE);}// 连接到服务器if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {perror("connection failed");exit(EXIT_FAILURE);}// 发送数据char *message = "Hello from client";send(sock, message, strlen(message), 0);printf("Message sent\n");// 接收响应read(sock, buffer, BUFFER_SIZE);printf("Server response: %s\n", buffer);close(sock);return 0;
}
关键步骤说明
- 服务器:创建套接字 → 绑定端口 → 监听连接 → 接受连接 → 读写数据。
- 客户端:创建套接字 → 连接服务器 → 读写数据。
- 需包含头文件
arpa/inet.h
和sys/socket.h
处理网络操作。 - 错误检查通过
perror
输出,exit(EXIT_FAILURE)
终止程序。
作业:
牛客网