高手,您好:
我写了一个进行Socket通信数据接收的Lib类的readsocketUTF()方法,源代码如下:
package c_port_packageBJDoctor;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket;public class Lib {
static String MyKey = "CJ加油2";
static InputStream inputstream = null;
static OutputStream outputstream = null;
static String readsocketUTF(Socket s){
System.out.println(s);
String info = "";
while(true){
byte[] buf = new byte[2048*512];
int num = 0;
try {
inputstream = s.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while (num != (-1)) {//是否读完所有数据
synchronized(s){
System.out.println(inputstream);
try {
num = inputstream.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
String buffer0 = null;
try {
buffer0 = new String(buf,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
info = buffer0.trim();
String infomation = Systemcrypt.HloveyRC4(info, MyKey);
try {
inputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return infomation;
}
}
static void write(Socket s,String str0){
String str = Systemcrypt.HloveyRC4(str0, MyKey);
try {
outputstream = s.getOutputStream();
byte[] b = str.getBytes("UTF-8");
int len = b.length;
outputstream.write(b,0,len);
outputstream.flush();
outputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} 但是每次调用它的时候,我的编译器都报出:
第31行代码有“空指针异常”..
并且,在我的这个Lib类参与系统的运算的时候,产生了:
第21行的“Socket is closed”的异常问题..
经过在这个地址:
http://tieba.baidu.com/p/2053358639
的了解,我知道了“出现Socket is closed”的异常的原因是由于:
关闭了流,或者Socket对象.
现在我已经将我的S端的服务器的相关类的源代码中的流和Socket对象的关闭语句,全部取消了..
但是,还是报出上面的错误..
希望得到高手的点拨:
问题,可能出在什么地方...?
Java调试Java SocketJava排错Java IMJava Swing
我写了一个进行Socket通信数据接收的Lib类的readsocketUTF()方法,源代码如下:
package c_port_packageBJDoctor;import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.Socket;public class Lib {
static String MyKey = "CJ加油2";
static InputStream inputstream = null;
static OutputStream outputstream = null;
static String readsocketUTF(Socket s){
System.out.println(s);
String info = "";
while(true){
byte[] buf = new byte[2048*512];
int num = 0;
try {
inputstream = s.getInputStream();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while (num != (-1)) {//是否读完所有数据
synchronized(s){
System.out.println(inputstream);
try {
num = inputstream.read(buf);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
String buffer0 = null;
try {
buffer0 = new String(buf,"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
info = buffer0.trim();
String infomation = Systemcrypt.HloveyRC4(info, MyKey);
try {
inputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return infomation;
}
}
static void write(Socket s,String str0){
String str = Systemcrypt.HloveyRC4(str0, MyKey);
try {
outputstream = s.getOutputStream();
byte[] b = str.getBytes("UTF-8");
int len = b.length;
outputstream.write(b,0,len);
outputstream.flush();
outputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} 但是每次调用它的时候,我的编译器都报出:
第31行代码有“空指针异常”..
并且,在我的这个Lib类参与系统的运算的时候,产生了:
第21行的“Socket is closed”的异常问题..
经过在这个地址:
http://tieba.baidu.com/p/2053358639
的了解,我知道了“出现Socket is closed”的异常的原因是由于:
关闭了流,或者Socket对象.
现在我已经将我的S端的服务器的相关类的源代码中的流和Socket对象的关闭语句,全部取消了..
但是,还是报出上面的错误..
希望得到高手的点拨:
问题,可能出在什么地方...?
Java调试Java SocketJava排错Java IMJava Swing
像你这种异常处理方式,一旦出现错误,是没法找的。你这些方法既然是直接接受socket对象的,其实完全可以直接把异常往上层throws。
inputstream = s.getInputStream();这里没获取到输入流啊
为什么我的这种异常处理方式,一旦出现错误,会有“是没法找的。”呢...?
进行了“一个try语句”的书写的话,我认为:
会有:
整个代码,会让更多的不需要进行“捕捉异常的语句被监视”而导致“程序的效率降低”的缺点出现吧...?
并且,在整个代码中,如果我进行了“面向每一个catch语句的"不同内容的输出处理,例如:System.out.println("line24");System.out.println("line34");System.out.println("line51");System.out.println("line68");”的代码添加的话,我应该能够获得:
准确定位错误,的代码功能的实现的效果吧..?
谢谢rummlee哥!!
弟我如何排查修改代码,能够得到弟我最新的上述代码的实现类的输出结果:
进行对应的“引起连锁错误的Lib类的第21行代码”的“关闭Socket水管”或者“Socket水管引出的流”的close语句,进行查找...?
弟我已经将主框架中的相关close语句和该登陆业务可能涉及到的类文件中的close语句进行了关闭操作了..
可是,还是为能够得到“登录功能的完美实现”..
希望withiter版主不吝赐教.
谢谢withiter版主!!