1

私は Swing アプリケーションに取り組んできましたが、ユーザーがローカル ネットワーク経由でファイルを送信できるオプションを追加したいと思ったとき、深刻な問題に直面しました。

ネットワーク経由でファイルを送信するために、Sockets ライブラリを使用してクライアントとサーバー間の接続を作成しました。Client.javaのソース コードは次のとおりです。

        package Test;

        import java.io.BufferedOutputStream;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.InputStream;
        import java.net.Socket;


        public class Client{
        public static void main (String [] args ) throws IOException {
         int filesize=6022386; // filesize temporary hardcoded

         long start = System.currentTimeMillis();
         int bytesRead;
         int current = 0;

          Socket sock = null;
          try{
          sock = new Socket("192.168.1.107",1234);
         }catch(Exception e){
           e.printStackTrace();
           e.getCause();
          }
           System.out.println("Connecting...");

           // receive file
          byte [] mybytearray  = new byte [filesize];
          InputStream is = sock.getInputStream();
          FileOutputStream fos = new FileOutputStream("C:\\Test\\test-copy.txt");
          BufferedOutputStream bos = new BufferedOutputStream(fos);
          bytesRead = is.read(mybytearray,0,mybytearray.length);
          current = bytesRead;


           do {
             bytesRead =
             is.read(mybytearray, current, (mybytearray.length-current));
            if(bytesRead >= 0) current += bytesRead;
            } while(bytesRead > -1);

            bos.write(mybytearray, 0 , current);
            bos.flush();
            long end = System.currentTimeMillis();
            System.out.println(end-start);
            bos.close();
            sock.close();
            sock.getPort();
    }
   }

Server.javaのソース コードは 次のとおりです。

   package Test;

   import java.io.BufferedInputStream;
   import java.io.File;
   import java.io.FileInputStream;
   import java.io.IOException;
   import java.io.OutputStream;
   import java.net.ServerSocket;
   import java.net.Socket;


   public class Server{
   public static void main (String [] args ) throws IOException {
   // create socket
   ServerSocket servsock = new ServerSocket(1234);
   while (true) {
  System.out.println("Waiting...");

  Socket sock = servsock.accept();
  //servsock.set
  System.out.println("Accepted connection : " + sock);

  // sendfile
  File myFile = new File ("C:\\testing\\test.txt");
  byte [] mybytearray  = new byte [(int)myFile.length()];
  FileInputStream fis = new FileInputStream(myFile);
  BufferedInputStream bis = new BufferedInputStream(fis);
  bis.read(mybytearray,0,mybytearray.length);
  OutputStream os = sock.getOutputStream();
  System.out.println("Sending...");
  os.write(mybytearray,0,mybytearray.length);
  os.flush();
  sock.close();
  }
}
}

ご覧のとおり、自分のコンピューターからローカル ネットワークに存在する別のコンピューターにtest.txtファイルを送信したいと考えています。Server.JavaClient.javaを実行すると、端末で例外が発生し、接続がタイムアウトしたことが示されます。

    java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    Connecting...
at  java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at Test.NewClass1.main(Client.java:27)
    Exception in thread "main" java.lang.NullPointerException
at Test.Client.main(Client.java:36)

さらに混乱したのは、 Localhostを使用してアプリケーションを実行すると、ファイルtest-copy.txtのコピーが適切に作成され、例外の理由を調べたところ、ファイアウォール特権である可能性があることがわかりました。ポート1234のトランザクションを有効にしましたが、それでも同じエラーが発生しました。

ここで私が求めているのは、それは権限の問題ですか、それとも特権の問題ですか? 私のコンピュータは管理者および送信先としても設定されています。または、正しく動作させるために何を追加または変更すればよいでしょうか?

私の質問が明確になったことを願っています。

ありがとうございました :)。

4

0 に答える 0