2 回答

TA贡献1848条经验 获得超6个赞
我能看到的唯一问题是您正在捕获(并忽略)来自getInputStream()和 的错误getOutputStream()。异常是停止执行,因此如果getInputStream()出现错误,则不会设置。您的两个流都将为空。
由于您至少要打印堆栈跟踪,因此请在实际崩溃之前检查其他堆栈跟踪。它可能会告诉您更多关于出了什么问题的信息。
为了解决这个问题,我建议不要捕捉异常,而是让构造函数 throw IOException。如果你早点抓住它,它会给你以后带来更少的麻烦。
编辑:我已经多看了你的课程,我发现你没有设置时间的地址Socket。在获取数据流之前执行此操作。不使用字段将起作用。
private Socket socket;
public SendRecieve(Socket skt) {
this.socket = skt;
}
@Override
public void run() {
try {
InputStream in = socket.getInputStream();
... etc
} ...
}

TA贡献1789条经验 获得超10个赞
您在 Clientclas 运行执行之前调用 Sendreceiver start,因此需要执行以下操作:
public class Clientclass extends Thread {
Socket socket;
String host_address;
public Clientclass(InetAddress hostaddress){
host_address=hostaddress.getHostAddress();
socket=new Socket();
}
@Override
public void run() {
try {
socket.connect(new InetSocketAddress(host_address,1111),500);
sendRecieve=new SendRecieve(socket);
sendRecieve.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
添加回答
举报