客户端SOCKET不断发送报文,如何获得每次的信息,并依次处理????
下面是小弟的代码,但是我这个代码运行情况是客户端不断发,服务器端接收,等到客户端不再发送时,再处理收到的报文。
现在我希望能收到一笔报文就立即处理,而不是堆积起来处理。请高手指点下如何改,谢谢!!!
代码如下
public class SocketServer {
public SocketServer(){
Socket incoming;
ServerSocket so;
try{
so= new ServerSocket(8010);
System.out.println("等待客户端连接");
while(true){
try{
incoming = so.accept( );
System.out.println("已连接客户端");
GetInfo gi=new GetInfo(incoming);
} catch (IOException e){
so.close();
e.printStackTrace();
}
}
}catch (IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
PropertyConfigurator.configure("E:\\Myeclipse\\workspace\\oufeitest\\src\\oufei\\test\\log4j.properties");
new SocketServer();
}
private static class GetInfo implements Runnable{ //?????
private Socket incoming;
private String s=null;
private BufferedReader b;
Thread t;
public GetInfo(Socket incoming){
try{
this.incoming=incoming;
b=new BufferedReader(new InputStreamReader(incoming.getInputStream()));
t=new Thread(this);
t.start();
}catch(IOException e){
e.printStackTrace();
}
}
public void run(){
try{
// while(true){
Logger logger=Logger.getLogger(SocketServer.class);
String lines;
String line="";
while ((lines = b.readLine()) != null){
line+=lines;
}
System.out.println("line----"+line);
System.out.println(line.length());
List<String> list1 = new ArrayList<String>();
for(int i=0;i<line.length();i+=63){
list1.add(line.substring(i,i+63));
}
Iterator list=list1.iterator();
while(list.hasNext()){
String co="";
co=(String) list.next();
logger.info("后台socket发送给我的内容:"+co);
String post_url="http://esales1.ofcard.com:8088/onlineorder.do";
String content=ConcatPackage.getPackage(co);
//用post方式发送http请求
String xmlcontent="";
try {
xmlcontent=Sender.readContentFromPost(post_url, content);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("不好啦,发送http请求出问题啦,哦也!");
e.printStackTrace();
}
System.out.println("查看取得的xml字符串是否为空:"+xmlcontent);
Decodexml decoderxml = new Decodexml();
String packagesend = decoderxml.xmlElements(xmlcontent); //xml字符串被解析并被拼装为package
// try {
// System.out.println("组装的发送后台的SOCKET为:"+"["+packagesend+"]");
//// Communicater.sendRequest(packagesend);
System.out.println("packagesend:"+packagesend);
// } catch (IOException e) {
// // TODO Auto-generated catch block
// System.out.println("发送给后台的socket失败!");
// e.printStackTrace();
// }
//
//
// }
}
// }
}catch(IOException e){
e.printStackTrace();
}
}
}
}
[解决办法]
能不能用一个容器来存储所接收到的报文信息,然后用一个线程来处理容器中的报文。容器一边存储,线程一边获取。
[解决办法]
你的客户端应该就是一起发送的,不是一条条来的。
你要是希望每条单独处理,
就把这个list去掉,每行处理一次,不存list中
while ((lines = b.readLine()) != null){ line+=lines; } System.out.println("line----"+line); System.out.println(line.length()); List<String> list1 = new ArrayList<String>();//这里了 for(int i=0;i<line.length();i+=63){ list1.add(line.substring(i,i+63)); }
[解决办法]
先存储下来,然后用线程去处理,两个步骤最好同时