java socket进行交互数据的一点疑问
try
{
server = new ServerSocket(m_iPort);
while(true)
{
client = server.accept();
InputStream is = client.getInputStream();
OutputStreamWriter os = new OutputStreamWriter(client.getOutputStream());
PrintWriter out = new PrintWriter(os);
strIn = GetData(is, STATLENGTH);
if(strIn.compareTo(QRY) == 0)
{
out.println("HAS");
/* 在这里向客户端提交其他语句,要等待客户返回还需要server.accept() 吗?还是直接 GetData 就可以了?*/
strIn = GetData(is, STATLENGTH);
if(strIn.length() == 32)
{
strHash = strIn.toString();
}
}
out.close();
is.close();
client.close();
}
}
问题点数:50、回复次数:4Top
1 楼majcos(千里之行,始于足下)回复于 2005-04-20 22:24:35 得分 25
还是直接 GetData 就可以了吧
你的GetData是怎么实现的?如果客户端的数据还没有到达服务端的话,那个读is的数据的方法就会被block,直到数据到达。Top
2 楼star_str(生命火花)回复于 2005-04-20 22:29:22 得分 25
我影象中数据c-s之间的传送都是先套用以下过程
数据->packet->send->Server->receive->packet->getData
所以我认为要getDataTop
3 楼BlueanGel(地狱天使)回复于 2005-04-20 22:30:29 得分 0
public String GetData(InputStream is, long lDataLength) throws IOException
{
StringBuffer sbBuffer = new StringBuffer();
char b;
for(int i=0; i<lDataLength; i++)
{
b = (char)is.read();
sbBuffer.append(b);
}
return sbBuffer.toString();
}
那就是说我不需要重新再创建socket来等待客户端的下个数据咯?记得accept也是block的Top
4 楼BlueanGel(地狱天使)回复于 2005-04-20 22:32:54 得分 0
to star_str(生命火花) :
我的意思是,在我前面的代码中,out.println("HAS"); 之后是否还需要server.accept一次?
或者直接GetData就可以得到客户端的第二次数据?Top




