【发布时间】:2020-02-11 18:17:34
【问题描述】:
我在返回在类中定义的对象的实例时遇到问题,在下面的代码中,我尝试在扩展 Thread 的类中建立 Socket 连接。 socket_connect 类:
public class socket_connect extends Thread {
private Socket socket;
private OutputStream out;
private String host;
private int port;
socket_connect(String host,int port){
this.host=host;
this.port=port;
this.start();
}
@Override
public void run() {
try {
this.socket = new Socket(this.host,this.port);
this.out=new BufferedOutputStream(this.socket.getOutputStream());
this.out.write("i am here \n\r".getBytes());
this.out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public int getPort() {
return port;
}
public String getHost() {
return host;
}
public Socket getSocket() {
return socket;
}
public OutputStream getOut() {
return out;
}
}
主类:
public class mymain {
public static void main(String[] args) {
Socket backsock;
String backhost;
int backport;
String msg ="Second Hi!!!!!";
socket_connect sc = new socket_connect("127.0.0.1",8080);
backsock = sc.getSocket();
backhost = sc.getHost();
backport = sc.getPort();
System.out.println(backhost + " " + backport);
try {
OutputStream buffer= new BufferedOutputStream(backsock.getOutputStream());
buffer.write(msg.getBytes());
buffer.flush();
} catch (IOException e) {
e.printStackTrace();
}
while (true) { }
}
}
连接已建立,Outputstream 在Socket_connect 类中将写入“我在这里!!!”到服务器。但是当我尝试使用在 main 中定义的 New Outputstream 执行另一个写入过程时,我在行中出现错误
OutputStream buffer= new BufferedOutputStream(backsock.getOutputStream());
我在主文件中定义的 backsocket 似乎是 null 。
即使我使用 backsock = sc.getSocket(); 使其与我在实例 sc 中定义的套接字相同。
但是 gethost() 和 getPort() 完美运行:
backhost = sc.getHost();
backport = sc.getPort();
System.out.println(backhost + " " + backport);
这将打印127.0.0.1 8080
我可以取回它们并将它们存储在 int 和 main 中定义的字符串中,并使用System.out 打印它们,但我无法从类中取回Socket 或输出流。他们返回null。
我曾经使用 C++,并且有一个指针可以指向程序中的确切对象,但在这里我不能。
【问题讨论】:
-
无关:阅读有关 java 命名约定的信息。类名在 java 中总是使用 UpperCamelCase。而且你不要在名称中使用“_”,除非 SOME_CONSTANT。
-
仅作记录:您在那里所做的几乎毫无意义。除了添加不工作的方法之外,在这里使用线程......真的没有做任何有意义的事情。如果您想了解多线程:阅读一本好书或教程,然后按照它进行操作。当你的知识还没有准备好时,不要试图发明你自己的用例。
-
@ghostcat 我正在尝试在 android 中使用 java,doseent 让我在主线程中使用 write,所以我必须创建 3 个线程,一个用于连接两个用于写入,三个用于连接,但我需要套接字所有三个线程都相同