今天做黑莓平臺上J2ME的Socket測試程序,服務(wù)端已經(jīng)調(diào)試好了,服務(wù)端也用模擬器調(diào)試好了,可到了黑莓上面就有問題了,程序運行正常,連接也正常建立,但發(fā)送出去的數(shù)據(jù)服務(wù)端就是收不到導(dǎo)致阻塞,服務(wù)端阻塞也導(dǎo)致了客戶端接收數(shù)據(jù)的阻塞。。。死活沒發(fā)現(xiàn)原因。。。最后測試來測試去才發(fā)現(xiàn)問題所在。
之前的程序:
SocketConnection conn = null;
OutputStream os = null;
InputStream is = null;

try
{
getUrl();

if ("".equals(url.trim()) || "".equals(port))
{
log("請將Socket測試地址和端口填寫完整", Thread.currentThread());
return;
}

try
{
Integer.parseInt(port);

} catch (Exception e)
{
log("端口號必須是整數(shù)", Thread.currentThread());
return;
}
log(CONNECTING_STR, Thread.currentThread());
conn = (SocketConnection) Connector.open("socket://" + url + ":" + port, Connector.READ_WRITE, true);
conn.setSocketOption(SocketConnection.LINGER, 5);

// 發(fā)送和回復(fù)的請求
os = conn.openDataOutputStream();
is = conn.openDataInputStream();
修正之后的程序:
SocketConnection conn = null;
DataOutputStream os = null;
DataInputStream is = null;

try
{
getUrl();

if ("".equals(url.trim()) || "".equals(port))
{
log("請將Socket測試地址和端口填寫完整", Thread.currentThread());
return;
}

try
{
Integer.parseInt(port);

} catch (Exception e)
{
log("端口號必須是整數(shù)", Thread.currentThread());
return;
}
log(CONNECTING_STR, Thread.currentThread());
conn = (SocketConnection) Connector.open("socket://" + url + ":" + port, Connector.READ_WRITE, true);
conn.setSocketOption(SocketConnection.LINGER, 5);

// 發(fā)送和回復(fù)的請求
os = conn.openDataOutputStream();
is = conn.openDataInputStream();
看出來了嗎?
os和is變量的聲明類型不一樣,如果用OutputStream和InputStream這一類的抽象類聲明只能調(diào)用標(biāo)準(zhǔn)讀寫接口,在J2ME模擬器上面沒有問題,但是到了黑莓上面死活都不行,后來用了具體實現(xiàn)類來聲明,調(diào)用了ReadUTF和WriteUTF來進(jìn)行讀寫操作,就沒有任何問題了。
---------------------------------------------------------
專注移動開發(fā)
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2010-01-10 22:16
TiGERTiAN 閱讀(1933)
評論(1) 編輯 收藏 所屬分類:
Java 、
J2ME 、
BlackBerry