【发布时间】:2021-12-02 17:27:02
【问题描述】:
我想制作一个 java 程序,将使用网络摄像头拍摄的照片从一台计算机发送到另一台未连接到 LAN 中的计算机。
我能够让程序拍照并将它们转换为文件,但我无法成功将它们发送到另一台计算机。
我不一定要发送照片,而是发送任何形式的数据。我是这种方法的新手,所以我可能会犯很多错误,因为我不确定它应该如何工作。
到目前为止我尝试过的代码:
客户端(我要从中发送数据的计算机,它应该截屏并将其发送到服务器):
public class GreetingClient
{
Image newimg;
static BufferedImage bimg;
byte[] bytes;
public static void main(String [] args)
{
String serverName = "127.0.0.1";//tried "localhost" and my actual ip adress as well.
int port = 6066;
try
{
Socket client = new Socket(serverName, port);
Robot bot;
bot = new Robot();
bimg = bot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(bimg,"JPG",client.getOutputStream());
client.close();
} catch(IOException | AWTException e) {
e.printStackTrace();
}
}
}
服务器代码(应该接收数据的计算机):
public class Main extends Thread
{
private ServerSocket serverSocket;
Socket server;
public Main(int port) throws IOException, SQLException, ClassNotFoundException, Exception
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(180000);
}
public void run()
{
while(true)
{
try
{
server = serverSocket.accept();
JFrame frame = new JFrame();
BufferedImage img=ImageIO.read(ImageIO.createImageInputStream(server.getInputStream()));
frame.getContentPane().add(new JLabel(new ImageIcon(img)));
frame.setVisible(true);
frame.pack();
}
catch(SocketTimeoutException st)
{
System.out.println("Socket timed out!");
break;
}
catch(IOException e)
{
e.printStackTrace();
break;
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
public static void main(String [] args) throws IOException, SQLException, ClassNotFoundException, Exception
{
Thread t = new Main(6066);
t.start();
}
}
当我尝试将数据从我的电脑发送到我的电脑时它可以工作(如果这有意义的话)但是当我尝试从另一台没有本地连接到我的电脑上发送数据时它不起作用。
如果可能的话,我想在不激活端口转发的情况下做到这一点。
感谢任何帮助。
【问题讨论】:
-
定义“它不起作用”。
-
做端口转发。严重地。您必须使用端口转发将一台家用计算机连接到另一台...如果您更愿意花钱,可以租用没有端口转发的“虚拟专用服务器”,但要花钱。
-
@user253751 谢谢你的 VPS 想法,我正在考虑买一个 VPS 但我不太确定如何用 java 编码,我想我会做一些研究哈哈跨度>
-
@user207421 by "doesn't work" 我的意思是它根本没有连接到服务器,给出的异常是:java.net.ConnectException: Connection denied: connect
-
@eddie 它是一台计算机,可能运行带有 ssh 访问权限的 linux,所以如果您能够使用 ssh 在 linux 计算机上安装 java - 这与仅使用命令提示符执行此操作几乎相同- 就是这样
标签: java sockets networking server client