我有以下代码。看来我正在准确地传输内容。但是,图像未被正确捕获。我是 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/