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-使用套接字发送对象并使用localhost之外的地址_Java_Sockets - Fatal编程技术网

Java-使用套接字发送对象并使用localhost之外的地址

Java-使用套接字发送对象并使用localhost之外的地址,java,sockets,Java,Sockets,所以我开始学习套接字,发现了两个问题 一, 所以我有那个代码,但每当我尝试连接它时,它都会说“连接被拒绝:连接”,但该代码在本地主机上运行良好,并且是端口转发的,所以有什么问题。 二, 当我使用该代码时,它不会打印我之前键入的“字符串”,它会给我classname@random数字。它不会将结果视为字符串而是对象,那么如何保存已发送的对象?刷新outputstream out.writeObject("string"); out.flush(); 在服务器端从流中读取数据 String da

所以我开始学习套接字,发现了两个问题
一,

所以我有那个代码,但每当我尝试连接它时,它都会说“
连接被拒绝:连接
”,但该代码在本地主机上运行良好,并且是端口转发的,所以有什么问题。
二,

当我使用该代码时,它不会打印我之前键入的“字符串”,它会给我
classname@random
数字。它不会将结果视为字符串而是对象,那么如何保存已发送的对象?

刷新outputstream

out.writeObject("string");
out.flush();
在服务器端从流中读取数据

 String data = in.readLine();// read data from stream sent by client
System.out.println(data);

如果使用
ObjectOutputStream
编写,请使用
ObjectInputStream
阅读

ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());

String data = in.readUTF();// reading String Object
刷新输出流

out.writeObject("string");
out.flush();
在服务器端从流中读取数据

 String data = in.readLine();// read data from stream sent by client
System.out.println(data);

如果使用
ObjectOutputStream
编写,请使用
ObjectInputStream
阅读

ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());

String data = in.readUTF();// reading String Object
刷新输出流

out.writeObject("string");
out.flush();
在服务器端从流中读取数据

 String data = in.readLine();// read data from stream sent by client
System.out.println(data);

如果使用
ObjectOutputStream
编写,请使用
ObjectInputStream
阅读

ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());

String data = in.readUTF();// reading String Object
刷新输出流

out.writeObject("string");
out.flush();
在服务器端从流中读取数据

 String data = in.readLine();// read data from stream sent by client
System.out.println(data);

如果使用
ObjectOutputStream
编写,请使用
ObjectInputStream
阅读

ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());

String data = in.readUTF();// reading String Object

您的问题不在于java,而在于网络。您通常无法从内部网络访问外部IP

尝试使用外部代理服务器,或要求网络外部的其他人托管客户端或服务器

您可以看到如何在java中配置代理。您应该使用socks代理


您有一个公共socks代理列表。

您的问题不在于java,而在于网络。您通常无法从内部网络访问外部IP

尝试使用外部代理服务器,或要求网络外部的其他人托管客户端或服务器

您可以看到如何在java中配置代理。您应该使用socks代理


您有一个公共socks代理列表。

您的问题不在于java,而在于网络。您通常无法从内部网络访问外部IP

尝试使用外部代理服务器,或要求网络外部的其他人托管客户端或服务器

您可以看到如何在java中配置代理。您应该使用socks代理


您有一个公共socks代理列表。

您的问题不在于java,而在于网络。您通常无法从内部网络访问外部IP

尝试使用外部代理服务器,或要求网络外部的其他人托管客户端或服务器

您可以看到如何在java中配置代理。您应该使用socks代理


您有一个公共socks代理列表。

因为您使用的是
ObjectOutputStream
来序列化对象,所以您需要使用一个互补的
ObjectInputStream
来反序列化另一端的对象

我认为
ObjectInputStream.readObject()
方法应该可以做到这一点

我自己还没有测试过,但尝试一下,看看会发生什么:

@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(57823);
Socket clientSocket = serverSocket.accept();
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
System.out.println(in.readObject());

由于您使用的是
ObjectOutputStream
来序列化对象,因此需要在另一端使用互补的
ObjectInputStream
来反序列化对象

我认为
ObjectInputStream.readObject()
方法应该可以做到这一点

我自己还没有测试过,但尝试一下,看看会发生什么:

@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(57823);
Socket clientSocket = serverSocket.accept();
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
System.out.println(in.readObject());

由于您使用的是
ObjectOutputStream
来序列化对象,因此需要在另一端使用互补的
ObjectInputStream
来反序列化对象

我认为
ObjectInputStream.readObject()
方法应该可以做到这一点

我自己还没有测试过,但尝试一下,看看会发生什么:

@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(57823);
Socket clientSocket = serverSocket.accept();
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
System.out.println(in.readObject());

由于您使用的是
ObjectOutputStream
来序列化对象,因此需要在另一端使用互补的
ObjectInputStream
来反序列化对象

我认为
ObjectInputStream.readObject()
方法应该可以做到这一点

我自己还没有测试过,但尝试一下,看看会发生什么:

@SuppressWarnings("resource")
ServerSocket serverSocket = new ServerSocket(57823);
Socket clientSocket = serverSocket.accept();
ObjectInputStream in = new ObjectInputStream(clientSocket.getInputStream());
System.out.println(in.readObject());

out.write()
将数据写入流,但不将其发送到客户端。要将其发送到客户端,您需要刷新流或关闭流。
readUTF
属于
ObjectInputStream
。我以为您在使用
ObjectOutputStream
编写数据时使用了
ObjectOutputStream
读取数据,这是我的问题之一。如果您使用
ObjectOutputStream
编写数据,那么您应该使用
ObjectInputStream
读取数据。write()将数据写入流,但不将其发送给客户端。要将其发送到客户端,您需要刷新流或关闭流。
readUTF
属于
ObjectInputStream
。我以为您在使用
ObjectOutputStream
编写数据时使用了
ObjectOutputStream
读取数据,这是我的问题之一。如果您使用
ObjectOutputStream
编写数据,那么您应该使用
ObjectInputStream
读取数据。write()将数据写入流,但不将其发送给客户端。要将其发送到客户端,您需要刷新流或关闭流。
readUTF
属于
ObjectInputStream
。我以为您在使用
ObjectOutputStream
编写数据时使用了
ObjectOutputStream
读取数据,这是我的问题之一。如果您使用
ObjectOutputStream
编写数据,那么您应该使用
ObjectInputStream
读取数据。write()将数据写入流,但不将其发送给客户端。要将其发送到客户端,您需要刷新流或关闭流。
readUTF
属于
ObjectInputStream
。我以为你做了
Ob