在现代网络通信中,发送数据是网络编程的核心任务之一,无论是简单的文本信息、文件传输还是复杂的多媒体数据流,都依赖于可靠且高效的数据传输机制,下面将从几个关键方面详细阐述如何在C语言环境下通过网络发送数据。
流式套接字(SOCK_STREAM):提供面向连接的、可靠的双向字节流服务,适用于TCP协议。
数据报套接字(SOCK_DGRAM):支持无连接的、不可靠的消息传递,适用于UDP协议。
#include <sys/socket.h>
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd == -1) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(socket_fd, (struct sockaddr)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(socket_fd);
exit(EXIT_FAILURE);
}
if (listen(socket_fd, BACKLOG) < 0) {
perror("Listen failed");
close(socket_fd);
exit(EXIT_FAILURE);
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
inet_pton(AF_INET, "SERVER_IP", &server_addr.sin_addr);
int connect_status = connect(socket_fd, (struct sockaddr)&server_addr, sizeof(server_addr));
if (connect_status < 0) {
perror("Connection failed");
close(socket_fd);
exit(EXIT_FAILURE);
}
const char message = "Hello, Server!";
size_t message_len = strlen(message);
ssize_t sent_bytes = send(socket_fd, message, message_len, 0);
if (sent_bytes == -1) {
perror("Send failed");
close(socket_fd);
exit(EXIT_FAILURE);
}
char buffer[1024];
ssize_t received_bytes = recv(socket_fd, buffer, sizeof(buffer), 0);
if (received_bytes == -1) {
perror("Receive failed");
close(socket_fd);
exit(EXIT_FAILURE);
}
buffer[received_bytes] = '