Java中通过TCP套接字发送图像
我正在尝试制作一个客户端-服务器应用程序,其中服务器列出可用图像的名称,客户端选择其中一个进行下载,如: 服务器中的线程Java中通过TCP套接字发送图像,java,sockets,tcpclient,tcpserver,tcpsocket,Java,Sockets,Tcpclient,Tcpserver,Tcpsocket,我正在尝试制作一个客户端-服务器应用程序,其中服务器列出可用图像的名称,客户端选择其中一个进行下载,如: 服务器中的线程 public void run() { try { in = new DataInputStream (server.getInputStream()); out = new DataOutputStream(server.getOutputStream()); ou
public void run()
{
try {
in = new DataInputStream (server.getInputStream());
out = new DataOutputStream(server.getOutputStream());
out.writeUTF("To List images write list");
out.writeUTF("To Exit write 2");
out.flush();
while((line = in.readUTF()) != null && !line.equals("2")) {
if(line.equalsIgnoreCase("list"))
{
String [] images= processor.listImages();
for ( int i=0;i<images.length;i++) {
out.writeUTF((+1)+"-"+images[i]);
out.flush();
line = "";
}
out.writeUTF("-1");
line = in.readUTF();
if(line.equalsIgnoreCase("2"))
{
break;
}else
{
BufferedImage img =processor.processInput(line);
boolean cc = ImageIO.write(img,"JPG",server.getOutputStream());
if(!cc)
{
out.writeUTF("The entered image is not avaliable !");
}else
{
System.out.println("Image Sent");
}
}
}else if(line.equalsIgnoreCase("2")){
break;
}
}
try{
in.close();
out.close();
server.close();
}catch(Exception e){
System.out.println("Error : "+ e.getMessage());
}
} catch (IOException e) {
System.out.println("IOException on socket listen: " + e.getMessage());
}
}
问题是,所有命令都已成功提交,直到图像接收图像停止(此处不移动)尝试刷新发送套接字上的外流,然后关闭套接字
问题似乎是,在刷新并关闭套接字之前,接收的
IOImage.read()
将等待,认为流中有更多的图像。您的程序确切停止在哪里?它将转到此处BuffereImage img=ImageIO.read(ImageIO.createImageInputStream(client.getInputStream())); 这个例子永远不会让人失望。
public void start() throws IOException
{
String line="";
while(true)
{
try{
line = inputFromStream.readUTF();
System.out.println(line);
line = inputFromStream.readUTF();
System.out.println(line);
line = readFromConsol.readLine();
writeToStream.writeUTF(line);
if(line.equalsIgnoreCase("2")){
break;
}else if(line.equalsIgnoreCase("list")){
boolean check=true;
while(check){
line = inputFromStream.readUTF();
System.out.println(line);
if("-1".equals(line)) {
check=false;
}
}
line = readFromConsol.readLine();
if(line.equalsIgnoreCase("2")) {
break;
}else
{
writeToStream.writeUTF(line);
BufferedImage img=ImageIO.read(
ImageIO.createImageInputStream(client.getInputStream()));
File f = new File("E:/MyFile.png");
f.createNewFile();
ImageIO.write(img, "PNG", f);
//process.saveImage(tmp);
System.out.println("Saved");
}
}
}catch(Exception e)
{
System.out.println(e);
break;
}
}
try{
inputFromStream.close();
readFromConsol.close();
writeToStream.close();
this.client.close();
}catch(Exception e){
System.out.println("Error : "+e.getMessage());
}
}