JAVA socket编程(使用BufferedReader的readline()函数读取最后一行等待20S),bufferedreader20s
分享于 点击 18131 次 点评:100
JAVA socket编程(使用BufferedReader的readline()函数读取最后一行等待20S),bufferedreader20s
作为Java菜鸟,虽说Java不熟,不过在这个模块这里卡住,也挺郁闷的。原计划使用的是HTTPCLIENT来进行读写操作的,其中曲折不再赘述,唯有吐槽int result = httpclient.executeMethod(post);
这个东西出错,在网上找了下,百思不得其解。项目就要提交,不得不该用Java的socket编程来实现。
在servlet中创建套接口
Socket sock1 = new Socket(serip,servport);
//向服务器端发送数据
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
sock1.getOutputStream())));
//读取服务器端数据
BufferedReader is = new BufferedReader(new InputStreamReader(sock1.getInputStream()));
接下来是准备通信内容 message="……";
组完字符串,就可以调用println()函数进行写出操作
out.println(message);
out.flush();
这个flush()是必须的,因为要实时刷新缓冲区,将写入的内容输出。
有写出,就有读入。参考网上的资料,因为要从服务器读取String类型的数据,所以选择使用BufferedReader 类的readline()来按行读取。在这里就碰到了一个挺坑的事情,就是在接收XML格式类型的字符串时,使用readline()接收最后一行数据,会阻塞近20S,这不是 闹么?根据网上资料,将其判断条件设为(str = is.readline()) != null 都没搞定,时间不多,最后只能取巧了。因为我只需要数据流中的某个字段值,所以用了个if()来截取我需要的数据,嘿嘿,反正老大也没辙,暂时只能这样了。
do
{
if(str.indexOf("PurchaseToken=") != -1)
{
url = str.substring(str.indexOf("PurchaseToken=")+len+1, str.indexOf("PurchaseToken=")+len+33);
break;
}
}while(str != null);
<pre name="code" class="javascript">代码基本就这样了,记录下,腾出手来在研究httpclient和这个闹心的readline();好心的大神看到小弟的拙作,希望多多指点小弟一二呀,不胜感激啊!
最后附上httpclient版本的错误提示
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SM]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3750)
at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1365)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1348)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1532)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:280)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1143)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1367)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1371)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1347)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/HttpMethod
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2436)
at java.lang.Class.getDeclaredFields(Class.java:1806)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:261)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:140)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:66)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:332)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:771)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:303)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5058)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 12 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.httpclient.HttpMethod
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1328)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1175)
... 26 morehttpclient版本中导入的包
相关文章
- 暂无相关文章
用户点评