我用Socket连接远端的一个端口进行通讯,当关闭后在连接就无法通讯了,报告Socket closed异常,这是为什么?有没有了解的,万分感谢!!!!以下是代码的例子:
Socket socket = null;
try {
socket = new Socket("10.128.0.202", 1024);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
os.write("AT\r".getBytes());
os.flush();
Thread.sleep(1000L);
int l = is.available();
byte[] b = new byte[l];
is.read(b);
System.out.println(new String(b));
// os.close();
// is.close();
socket.close();
socket = new Socket("10.128.0.202", 1024);
os = socket.getOutputStream();
os.write("AT\r".getBytes());
os.flush();
Thread.sleep(1000L);
l = is.available();
b = new byte[l];
is.read(b);
System.out.println(new String(b));
// os.close();
socket.close();
System.out.println("End");
} catch(UnknownHostException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} catch(InterruptedException e) {
e.printStackTrace();
}
当调用第二个l = is.available();时就会报异常,那么应该如何完全关闭一个Socket?因为我需要在程序的不同地方分别连接,又不能让这个Socket一直连着。
Socket socket = null;
try {
socket = new Socket("10.128.0.202", 1024);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
os.write("AT\r".getBytes());
os.flush();
Thread.sleep(1000L);
int l = is.available();
byte[] b = new byte[l];
is.read(b);
System.out.println(new String(b));
// os.close();
// is.close();
socket.close();
socket = new Socket("10.128.0.202", 1024);
os = socket.getOutputStream();
os.write("AT\r".getBytes());
os.flush();
Thread.sleep(1000L);
l = is.available();
b = new byte[l];
is.read(b);
System.out.println(new String(b));
// os.close();
socket.close();
System.out.println("End");
} catch(UnknownHostException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
} catch(InterruptedException e) {
e.printStackTrace();
}
当调用第二个l = is.available();时就会报异常,那么应该如何完全关闭一个Socket?因为我需要在程序的不同地方分别连接,又不能让这个Socket一直连着。
解决方案 »
- 关于java Clone的困惑
- 运行时出现 log4j:WARN No appenders could be found for logger (freemarker.cache). 错误
- swing 触发事件,急急
- JDBC中DatabaseMetaData#getSchemas()
- synchronized和全局变量问题
- 新手请教!为什么用javac编译java文件,其中package命令不予执行?
- 帮忙啊,我现在要把gb2312转换为utf8,如何做?
- 作MailingList请指教!!!在线等待!
- 请问sqlserver 2000的排序sql怎样写?
- Java 如何读取一个二进制流中指定长度的数据并转换成整数
- 新人提个简单的问题 在线等。。。。。
- 怎样保证一个评分系统不同人数评分状况下达到公平..
你的os你都知道重新获取,为什么is就不重新获取呢?
socket = new Socket("10.128.0.202", 1024);
os = socket.getOutputStream();
os.write("AT\r".getBytes());
os.flush();
换成和最上面那里的一样
socket = new Socket("10.128.0.202", 1024);
OutputStream os = socket.getOutputStream();
InputStream is = socket.getInputStream();
os.write("AT\r".getBytes());
os.flush();
重新得到输入流!(InputStream)