用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 20:06:43 浏览: 31
对的,你的理解很正确。下面是一个简单的实现供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <fcntl.h>
#define MAX_BUFF_SIZE 1024
void die(char *msg) {
perror(msg);
exit(1);
}
int main(int argc, char *argv[]) {
if (argc != 3) {
fprintf(stderr, "Usage: %s <ip> <port>\n", argv[0]);
exit(1);
}
int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock == -1) {
die("socket");
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(argv[1]);
addr.sin_port = htons(atoi(argv[2]));
if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) == -1) {
die("connect");
}
char name[256];
printf("Enter the file name: ");
fgets(name, sizeof(name), stdin);
name[strcspn(name, "\n")] = '\0';
int fd = open(name, O_RDONLY);
if (fd == -1) {
die("open");
}
char buff[MAX_BUFF_SIZE];
int nread = 0;
while ((nread = read(fd, buff, sizeof(buff))) > 0) {
int nsend = send(sock, buff, nread, 0);
if (nsend == -1) {
die("send");
}
}
close(fd);
close(sock);
return 0;
}
```
该客户端程序通过 `fgets` 获取文件名, `open` 打开文件, `read` 循环读取文件并通过 `send` 发送文件给服务器。请注意,如果文件不存在或者无法打开,程序将退出并报错。同时,我们还需要关闭文件描述符和套接字描述符。