问题是这样的
socket server 是Java实现的 socket 客户端是C语言实现的 当客户端发请求时,server端input.readUTF()时报java.io.EOFException,网上查了,说是读取输入流末尾还读 会报这个错,try{...} catch{java.io.EOFException e}就可以了。但是我添加了后,日志不报错,对方说还是没有响应。说明还是有问题。 不知该怎么解决了。请各位看看。
请求报文为xml格式的String 我本地自己Java写的客户端测试是可以的。
代码如下:
public class SocketServer extends Thread implements Runnable {
private ServletConfig sce;
private WebApplicationContext appConent;
//构造函数
public SocketServer(ServletConfig sce,WebApplicationContext appConent){
this.sce=sce;
this.appConent=appConent;
}
public void run() {
try{
ServerSocket listener=new ServerSocket(5555);
Socket server;
while(true){
//开始监听
server=listener.accept() ;
NetWorkServer nwServer=new NetWorkServer(server,sce,appConent);
nwServer.start();
}
}
catch (Exception e){
e.printStackTrace();
}
}
}
protected Socket socket;
private static final Log log = LogFactory.getLog(NetWorkServer.class);
private ServletConfig sce;
private WebApplicationContext appConent;
public NetWorkServer(Socket sThread,ServletConfig sce,WebApplicationContext appConent){
this.socket =sThread;
this.sce=sce;
this.appConent=appConent;
}
public void run() {
try{
DataInputStream input = new DataInputStream(socket.getInputStream());
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
//客户端请求传过来的String(这里是可以的,能收到客户端请求的String)
String paraInfoXML = input.readUTF();
/*返回结果*/
String result = "" ;
SAXReader reader=new SAXReader();
StringReader sr=new StringReader(paraInfoXML);
org.xml.sax.InputSource is=new org.xml.sax.InputSource(sr);
try {
/*业务逻辑*/
Document doc=reader.read(is);
} catch (DocumentException e) {
e.printStackTrace();
}
output.writeUTF(result);
output.flush();
output.close();
input.close();
//关闭连接
socket.close();
}
catch (IOException e){
e.printStackTrace();
}
}