JAVA socket編程(使用BufferedReader的readline()函數讀取最後一行等待20S)

作爲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 more


httpclient版本中導入的包




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章