Linux Socket是一种网络通信机制,允许不同计算机之间通过网络进行数据传输。Socket可以用于实现客户端和服务器之间的通信。在Linux系统中,Socket编程通常使用C语言进行。
socket()
函数创建一个Socket。bind()
函数将Socket绑定到一个IP地址和端口。listen()
函数监听客户端的连接请求。accept()
函数接受客户端的连接请求。send()
函数将图片数据发送到客户端。close()
函数关闭Socket。以下是一个简单的服务器端和客户端示例,展示如何通过Socket发送图片。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int server_fd, new_socket;
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
FILE *fp;
// 创建Socket
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
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);
}
// 发送图片
fp = fopen("image.jpg", "rb");
if (fp == NULL) {
perror("fopen");
exit(EXIT_FAILURE);
}
while (fread(buffer, 1, BUFFER_SIZE, fp) > 0) {
send(new_socket, buffer, strlen(buffer), 0);
}
fclose(fp);
close(new_socket);
close(server_fd);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#define PORT 8080
#define BUFFER_SIZE 1024
int main() {
int sock = 0;
struct sockaddr_in serv_addr;
char buffer[BUFFER_SIZE] = {0};
FILE *fp;
// 创建Socket
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
perror("socket creation error");
return -1;
}
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/ Address not supported");
return -1;
}
// 连接到服务器
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
perror("Connection Failed");
return -1;
}
// 接收图片
fp = fopen("received_image.jpg", "wb");
if (fp == NULL) {
perror("fopen");
return -1;
}
while (recv(sock, buffer, BUFFER_SIZE, 0) > 0) {
fwrite(buffer, 1, strlen(buffer), fp);
}
fclose(fp);
close(sock);
return 0;
}
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云