java - 在 JAVA 中通过 TCP 套接字通过网络传输图像不起作用?

标签 java sockets

我有以下代码。看来我正在准确地传输内容。但是,图像未被正确捕获。我是 Java 新手。基本上,我是一名 C、C++、Linux 程序员。我想知道问题是逐行读取缓冲区。我在这里遗漏了什么吗?

这是套接字服务器代码-

import java.io.*;
import java.net.*;


public class ImageSocketServer {

    public static void main(String args[]) throws IOException
    {

        ImageSocketServer imageServer = new ImageSocketServer();
        imageServer.run();

    }

    private void run() throws IOException {
        // TODO Auto-generated method stub

        ServerSocket serverSock = new ServerSocket(1025);
        Socket sock = serverSock.accept();

        InputStream imagetoShare = new BufferedInputStream(new FileInputStream("/export/home/joshis1/Lizard.png"));

        PrintStream imageSend = new PrintStream( sock.getOutputStream());
        imageSend.print(imagetoShare);

    }

}

这是套接字客户端代码-

import java.io.*;
import java.net.*;

public class ImageSocketClient {

    public static void main(String args[]) throws IOException
    {

        ImageSocketClient imageClient = new ImageSocketClient();
        ImageSocketClient.run();

    }

    private static void run() throws UnknownHostException, IOException
    {
        // TODO Auto-generated method stub

        BufferedWriter bufWriter = null;  
        bufWriter = new BufferedWriter(new FileWriter(  
                "/export/home/joshis1/file1.png"));  
        Socket sock = new Socket("localhost", 1025);
        InputStreamReader IR = new InputStreamReader(sock.getInputStream());
        BufferedReader BR = new BufferedReader(IR);

        String data;  
        while ((data = BR.readLine()) != null)
        {  
            System.out.println("Shreyas got the data");
            bufWriter.write(data);  
        }  

        bufWriter.close();  
    }


}

我看到源图像的大小 -

$ ls -l Lizard.png 
-rw-rw-r-- 1 joshis1 joshis1 19071522 May 29 15:46 Lizard.png

and the destination image is wrongly copied -

$ ls -l file1.png 
-rw-rw-r-- 1 joshis1 joshis1 34 May 29 17:38 file1.png

最佳答案

首先,您的imageSend.print(imagetoShare);发送InputStream的字符串表示形式,它解释了文件的小内容。您需要创建一个循环,从 imagetoShare 读取数据(尽管您可能想更好地命名它,它不是图像,而是流)并将数据写入输出流(四处搜索典型的读写循环)。

其次,您使用PrintStream,它用于将字符数据写入OutputStream。您想使用 BufferedOutputStream 来实现这一点。

关于java - 在 JAVA 中通过 TCP 套接字通过网络传输图像不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529346/

相关文章:

Python套接字如何处理客户端意外关闭

php - Mac 终端/MySQL 配置问题 |错误 2002 (HY000) : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

java - 当表单中存在多个具有相同类型的参数时,全局绑定(bind)初始值设定项会出现问题

java - Java中的栈和动态数组实现

java - 不确定 ConcurrentModificationException 的原因

.net - 通信策略 : Linux to .Net over SSL

c - Recv() 一次一行

java - 在 pom.xml 中排列配置文件和插件

java - Spring - 为什么返回值在屏幕中显示 XML 类型?

python - 在socket编程python中发送多个字符串