用C语言写 三、客户端发送文件 1.char* fgets(name, sizeof(name), stdin);获取文件名 2.open(name,O_RDONLY);打开文件 3.read(fd,buff,sizeof(buff));循环读取文件 4.send_message(fd,buff,res);发送文件给服务器
时间: 2023-11-26 10:05:09 浏览: 92
好的,你的第一个问题是如何用C语言写客户端发送文件的代码。以下是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#define PORT 8080
#define MAXLINE 1024
int main() {
int sockfd;
char buffer[MAXLINE];
struct sockaddr_in servaddr;
// 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
perror("socket creation failed");
exit(EXIT_FAILURE);
}
memset(&servaddr, 0, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(PORT);
// 连接服务器
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0) {
perror("connection with the server failed");
exit(EXIT_FAILURE);
}
// 获取文件名
char name[MAXLINE];
printf("Please enter the file name: ");
fgets(name, sizeof(name), stdin);
name[strcspn(name, "\n")] = 0; // 去掉换行符
// 打开文件
int fd = open(name, O_RDONLY);
if (fd == -1) {
perror("failed to open file");
exit(EXIT_FAILURE);
}
// 循环读取文件并发送给服务器
int n, total = 0;
while ((n = read(fd, buffer, MAXLINE)) > 0) {
int sent = send(sockfd, buffer, n, 0);
if (sent == -1) {
perror("failed to send data");
exit(EXIT_FAILURE);
}
total += sent;
}
// 关闭文件和套接字
close(fd);
close(sockfd);
printf("Sent %d bytes of data to the server\n", total);
return 0;
}
```
这段代码首先创建了一个套接字,然后连接到指定的服务器。接着,它从标准输入中获取文件名,并打开文件。然后,它循环读取文件并将数据发送到服务器。最后,它关闭文件和套接字,并打印发送的字节数。请注意,此示例仅演示了发送文件的基本方法,实际使用时需要进行错误检查和处理。
阅读全文