2016-11-03 1 views
-2

クライアントとサーバプロジェクトで、各クライアント&サーバが互いにファイルを送信します。プログラムの目的は、両端でファイルを送受信していることです。 プログラムはローカルホスト上で非常に完璧に動作しますが、2台のマシンに実装するとエラーが発生しますが、サーバマシンIPを指定してもエラーは発生します。私は、プログラムがマシン上で動作するのを妨げる可能性のある原因が何であるかを知りたいだけです。クライアントで私のプログラムはローカルホストで完璧に動作していますが、2台のマシンに実装するとエラーが発生します

サーバ側

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.PrintStream; 
import java.net.ServerSocket; 
import java.net.Socket; 
import javax.swing.JOptionPane; 

class ServerHandler { 
    PrintStream printStream; 

    public ServerHandler(){ 

    } 
    public static void main(String [] args){ 
     new ServerHandler().sentIT("Super_woman.avi"); 
    } 

    public void sentIT(String pathName) { 

     try { 
      ServerSocket server = new ServerSocket(65141); 
      System.out.println("Server Started"); 
      Socket socket = server.accept(); 
      System.out.println(" "+socket.getLocalAddress()); 
      int BUFFER_SIZE = 1024 * 50; 
      byte[] buffer; 
      buffer = new byte[BUFFER_SIZE]; 
      File paths = new File(pathName); 
      BufferedInputStream input = 
       new BufferedInputStream(new FileInputStream(paths)); 
      DataOutputStream ou = new DataOutputStream(socket.getOutputStream()); 
      try (BufferedOutputStream out = new BufferedOutputStream(ou)) { 
       ou.writeUTF(paths.getName()); 
       int len, i=0; 
       while ((len = input.read(buffer)) > 0) { 
        out.write(buffer, 0, len); 
       } 
       out.flush(); 
       out.close(); 
       input.close(); 
      } catch (Exception e) { 
       JOptionPane.showMessageDialog(null, "Error sending File/n FAILED", "Sending Failed", 
       JOptionPane.ERROR_MESSAGE); 
      } 
     } 
    } 
} 

クライアント側

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.DataInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.Socket; 
import javax.swing.JOptionPane; 

public class ClientReceive{ 
    private DataInputStream ins; 
    private BufferedInputStream bis; 
    private BufferedOutputStream out; 

    public ClientReceive(){ 

    } 
    public static void main(String [] args){ 
     new ClientReceive().receiveFile(); 
    } 

    public void receiveFile() { 

     try { 
      int BUFFER_SIZE = 1024 * 50; 
      byte[] buffer; 
      buffer = new byte[BUFFER_SIZE]; 
      Socket socket = new Socket("localhost", 65141); 
      ins = new DataInputStream(socket.getInputStream()); 
      String path=ins.readUTF(); 
      bis = new BufferedInputStream(ins); 
      out = new BufferedOutputStream(new FileOutputStream("HotSpotFileShare_"+path)); 
      int len; 
      while ((len = bis.read(buffer)) > 0) { 
       out.write(buffer, 0, len); 
      } 
      out.flush(); 
      JOptionPane.showMessageDialog(null, "File "+path+" Received Successfully", 
        "File Received", JOptionPane.INFORMATION_MESSAGE); 
      //System.out.println("\nDone!");  
     } catch (IOException ex) { 
      JOptionPane.showMessageDialog(null, "Operation Failed", "Error", JOptionPane.ERROR_MESSAGE); 
     } 
     finally { 
      if (ins != null && out != null){ 

       try { 
        out.close(); 
        ins.close(); 

       } catch (IOException ex) { 
        JOptionPane.showMessageDialog(null, "Unable to Close Connection", "Error", JOptionPane.ERROR_MESSAGE); 
       } 
      } 
     } 
    } 
} 
+0

どのようなエラーが表示されますか?どのようにサーバー上でそれを実行していますか?あなたのコンピュータにはどんなJREがありますか?サーバーにはどのようなJREがありますか? –

+3

クライアントは「localhost」に接続します。あなたのサーバが "localhost"で動作していない**ときに何が起こると思いますか? – GhostCat

+0

私はすでにサーバマシンのIPv4アドレスを使って実装しています。 –

答えて

2

、あなたは、この持っている:

Socket socket = new Socket("localhost", 65141); 

をしかし、あなたは、localhostに接続したいので、代わりにしないでくださいlocalhostの場合は、サーバーを実行しているコンピュータのIPアドレスを入力します。

これは、同じネットワーク(LAN)上にある場合に機能します。 IPv4...があなたであると言っラインで数列を

ipconfig 

: - (>タイプcmd.exeと入力し、Enterキーを押しますCtrlキー+ R)とCMDにこれを入力するあなたはCMDを開くことができます(Windowsの場合)サーバーコンピュータのIPを取得するには IPアドレス

+0

もちろん、私はサーバマシンのIPを使ってみましたが、動作しません。ファイルを送信している間、接続は通常切断されます。 –

+0

ファイルを送信するメソッドが 'socket.close()'を呼び出す可能性があります – ItamarG3

+0

実際には、ファイルを送信するときにエラーが発生し、 'finally'ブロックに入ります。 – ItamarG3

関連する問題