socket client传文件到server,server端接收成功后给客户端反馈一个信息

java server接收文件后返回字符串给client


客户端:

/* 通讯 
需求:传送任意文件 
 
tcp传输要定义2个端点,客户端和服务端 
步骤 
1.定义服务, 服务器ip和接收端口 
2.读取客户端已有的图片文件 
3.使用socket输出流将数据发给服务端 
4.读取服务端的反馈信息 
5.关闭资源 
 
注意: 
1.在while循环中的read方法最后读到文件结束标记-1后循环退出了 
  而没有将该标记写入socket流中,那么服务端接收到的数据是不完整的,而且停不下来 
  用shutdownOutput方法告诉服务端文件到了末尾结束发送了 
 
[示例]:传送任意文件 (客户端) 
*/  
  
import java.net.*;  
import java.io.*;  
class Demo  
{  
  public static void main(String[] args) throws Exception  
  {  
    new FileClient("c:\\FoxitReader_CHS.rar"); //启动客户端,准备发送指定文件  
  }  
}  
  
class FileClient  //客户端  
{  
  FileClient(String fileStr) throws Exception  
  {  
    s.op("客户端启动....");  
    File file = new File(fileStr);  //关联一个文件c:\\FoxitReader_CHS.rar  
    if(file.isFile())  //是一个标准文件吗?  
    {  
      client(file);    //启动连接  
    }  
    else  
    {  
      s.op("要发送的文件 "+fileStr+" 不是一个标准文件,请正确指定");  
    }  
  }  
    
  public void client(File file)throws Exception  
  {  
    Socket sock= new Socket("192.168.1.3",10007); //指定服务端地址和端口  
  
    FileInputStream fis = new FileInputStream(file); //读取本地文件  
    OutputStream sockOut = sock.getOutputStream();   //定义socket输出流  
      
    //先发送文件名.让服务端知道  
    String fileName = file.getNam

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,实现服务器向客户文件可以采用以下步骤: 1. 服务器打开指定的文件,并读取文件内容到缓存区中。 2. 服务器将缓存区中的文件内容发送给客户。 3. 客户接收文件内容后,将文件内容写入到指定的本地文件中。 下面是一个简单的示例代码,可以实现服务器向客户文件并保存到指定的本地目录中: 服务器代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #define PORT 8888 #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { int server_fd, client_fd; struct sockaddr_in server_addr, client_addr; socklen_t client_addr_len = sizeof(client_addr); char buffer[BUFFER_SIZE]; // 创建服务器socket if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket create failed"); exit(1); } // 设置服务器口号和IP地址 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 绑定服务器口号和IP地址 if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("bind failed"); exit(1); } // 开始监听客户的连接请求 if (listen(server_fd, 5) == -1) { perror("listen failed"); exit(1); } printf("Waiting for client to connect...\n"); // 接受客户连接请求 if ((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len)) == -1) { perror("accept failed"); exit(1); } printf("Client connected: %s:%d\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); // 打开文件 int file_fd = open("test.txt", O_RDONLY); if (file_fd == -1) { perror("open file failed"); exit(1); } // 读取文件内容到缓存区中并发送给客户 ssize_t count; while ((count = read(file_fd, buffer, BUFFER_SIZE)) > 0) { if (write(client_fd, buffer, count) == -1) { perror("send file failed"); exit(1); } } printf("File sent successfully\n"); // 关闭文件socket close(file_fd); close(client_fd); close(server_fd); return 0; } ``` 客户代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #define PORT 8888 #define BUFFER_SIZE 1024 int main(int argc, char *argv[]) { int client_fd; struct sockaddr_in server_addr; char buffer[BUFFER_SIZE]; // 创建客户socket if ((client_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket create failed"); exit(1); } // 设置服务器口号和IP地址 memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_port = htons(PORT); server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // 连接服务器 if (connect(client_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) == -1) { perror("connect failed"); exit(1); } printf("Connected to server\n"); // 打开本地文件 int file_fd = open("test.txt", O_WRONLY | O_CREAT, 0644); if (file_fd == -1) { perror("open file failed"); exit(1); } // 从服务器接收文件内容并写入到本地文件中 ssize_t count; while ((count = read(client_fd, buffer, BUFFER_SIZE)) > 0) { if (write(file_fd, buffer, count) == -1) { perror("write file failed"); exit(1); } } printf("File received and saved successfully\n"); // 关闭文件socket close(file_fd); close(client_fd); return 0; } ``` 在上述代码中,服务器打开了名为“test.txt”的文件,并将文件内容发送给客户客户接收文件内容后,将文件内容写入到名为“test.txt”的本地文件中。你只需要将文件名替换成你要递的文件名,并将服务器的IP地址和口号设置为正确的值即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值