2

我正在开发一个通过网络发送文件的应用程序。

我使用 2 个类来发送和接收我选择的文件。

当我在本地主机上工作时,我遇到的问题是进程正常,但是当我将 IP 地址更改为网络 IP 时,它不起作用。

这是我正在使用的两个类。

类服务器:

    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(41111);
while (true) {
  System.out.println("Waiting...");

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

  // sendfile
  File myFile = new File ("C:\\Users\\Marrah.Zakaria\\Desktop\\test\\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();
  }
}
}

班级客户:

 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 = new Socket("192.168.1.100",41111);
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();
}
}

运行异常后出现:

Exception in thread "main" java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
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)

请你告诉我我该怎么做才能摆脱它。


我停用了接收器防火墙,发生了不同的异常:

 Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
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)
4

3 回答 3

2

如果你启动服务器,你telnet能做到这个组合吗?

telnet 192.168.1.100 41111

如果您有路由问题,它会立即告诉您(telnet将拒绝连接)

于 2012-10-09T14:22:12.383 回答
1

还尝试从您运行客户端的机器上 ping 192.168.1.100(即,如果您在 Windows 框中,则从命令提示符)

于 2012-10-09T14:27:41.647 回答
1

您是否检查过网络上是否有防火墙阻止了自定义端口 (41111)(同时检查 Windows 防火墙)?

这是超时时要检查的第一件事。

于 2012-10-09T14:21:10.977 回答