Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java中的套接字启用防火墙和路由器权限来发送文件?_Java_Sockets_Exception_Firewall_Connection Timeout - Fatal编程技术网

如何使用java中的套接字启用防火墙和路由器权限来发送文件?

如何使用java中的套接字启用防火墙和路由器权限来发送文件?,java,sockets,exception,firewall,connection-timeout,Java,Sockets,Exception,Firewall,Connection Timeout,我一直在开发一个Swing应用程序,当我想添加一个选项,用户可以通过本地网络发送文件时,我遇到了一些严重的问题 为了通过网络发送文件,我使用Sockets库在客户端和服务器之间创建了一个连接,client.java的源代码是: package Test; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; imp

我一直在开发一个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();
  }
  }
  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();
 }
 }
 }
而Server.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();
  }
  }
  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.Java和Client.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)
java.net.ConnectException:连接超时:连接
位于java.net.DualStackPlainSocketImpl.connect0(本机方法)
连接。。。
位于java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
位于java.net.socksocketimpl.connect(socksocketimpl.java:391)
位于java.net.Socket.connect(Socket.java:579)
位于java.net.Socket.connect(Socket.java:528)
位于java.net.Socket。(Socket.java:425)
位于java.net.Socket(Socket.java:208)
位于Test.NewClass1.main(Client.java:27)
线程“main”java.lang.NullPointerException中出现异常
位于Test.Client.main(Client.java:36)
更让我困惑的是,当我使用我的本地主机运行应用程序时,文件test copy.txt的副本创建得很好,我已经查找了异常的原因,我发现可能是防火墙权限,我为端口启用了事务:1234,但我仍然得到了相同的错误

我想问的是,这是权限还是特权的问题?如果是,我应该将什么设置为防火墙或路由器的配置以启用事务? 我的计算机被设置为管理员和目标,我正在使用Windows7作为操作系统

我希望我把问题说清楚


谢谢:)。

我之所以发布这两个类,是为了让每个人都明白我的问题:)@ZakariaMarrah-代码与你真正的问题无关,而你真正的问题与主题无关。关于如何配置防火墙的问题不是编程问题。(你最好删除所有不相关的内容,因为如果问题确实被迁移,当他们看到Java代码和标记时,他们很可能会将其取消…)如果你看到代码,你会注意到一个称为连接超时的异常,当我搜索原因时,我发现是防火墙或路由器配置,这就是我询问防火墙或路由器配置的原因:)