【发布时间】:2015-09-23 10:17:58
【问题描述】:
我已经在 java 中开发了 TCP/IP 服务器,侦听端口,并且 GPS 设备正在将数据发送到服务器。
设备最初将IMEI号发送给服务器,服务器以01确认。设备收到确认后,向服务器发送一个新的数据包。
我可以通过 TCP 服务器获取 IMEI 号码,在发送确认后,我无法从客户端接收新的数据包数据。我也在下面包括我的代码。请让我知道我哪里错了。
这是我的代码
while(true)
{
socket = serverSocket.accept();
if(!socket.isClosed())
{
System.out.println("Server accepted");
BufferedInputStream is = new
BufferedInputStream(socket.getInputStream(),1500);
System.out.println("Server accepted"+is.available());
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
System.out.println("Server");
Object response="";
int flag=0;
Thread.sleep(2000);
response = br.readLine();
DataOutputStream outToClient = new
DataOutputStream(socket.getOutputStream());
try
{
System.out.println("break::"+response);
String hexString = "01";
byte[] b = hexString.getBytes(StandardCharsets.US_ASCII);
int len = b.length;
outToClient.write(b,0,len);
outToClient.write('\n');
outToClient.flush();
Thread.sleep(2000);
if(is.available()==0)
{
response = br.readLine();
System.out.println("break::"+response);
String s = ((String) response).substring(2,4);
int count = Integer.parseInt(s);
System.out.println("String len : "+count);
outToClient.write(count);
}
br.close();
}
catch (NullPointerException e)
{
e.printStackTrace();
}
socket.close();
}
}
【问题讨论】:
-
我正在以二进制数据包格式发送响应,是否正确?
-
不要依赖
is.available()==0。它很可能不是你所期望的。这段代码还有更多的设计问题,但这会导致太过分。