J2ME could waste a lot of my time .
Today when I study GCF(Generic Connection Framework), I have to solve some problems.
The code under these words is on my textbook written by WangSen.
import java.io. * ;
import java.net. * ;
public class MySocketServer
... {
public static String data[] = new String[]...{"1", "2", "3", "4"};
public static void main(String arg[]) throws Exception
...{
System.out.println("ready to connection");
ServerSocket ss = new ServerSocket(8189);
Socket s = ss.accept();
System.out.println("connection complete");
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
String line;
while(true) //this is the problem
...{
try
...{
line = dis.readUTF();
System.out.println("Client:" + line);
process(line.trim(), dos);
System.out.println("end process");
}
catch(Exception e) //and this
...{
}
}
s.close();
System.out.println("sevice end");
}
public static void process(String s, DataOutputStream dos) throws Exception
...{
boolean find = false;
System.out.println("start process");
for(int i = 0; i < data.length; i++)
...{
if(data[i].indexOf(s) != -1)
...{
dos.writeUTF(data[i] + ",");
dos.flush();
find = true;
System.out.println("find data");
}
}
if(!find)
...{
dos.writeUTF("cannot find the data");
}
}
}
The example is not very clearly. I don't think this program of server should support the client continuely, because the code while(true) should continue forever except throwing an exception. When the result is return, the EFOException is throwing, and the server's socket is closed.
The truth proved me. When the client get the result, it would get only once! So I change the code to this:
import java.io. * ;
import java.net. * ;
public class MySocketServer
... {
public static String data[] = new String[]...{"1", "2", "3", "4"};
public static void main(String arg[]) throws Exception
...{
System.out.println("ready to connection");
ServerSocket ss = new ServerSocket(8189);
while(true)
...{
Socket s = ss.accept();
System.out.println("connection complete");
DataInputStream dis = new DataInputStream(s.getInputStream());
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
String line;
try
...{
line = dis.readUTF();
System.out.println("Client:" + line);
process(line.trim(), dos);
System.out.println("end process");
}
catch(Exception e)
...{
}
}
s.close();
System.out.println("sevice end");
}
public static void process(String s, DataOutputStream dos) throws Exception
...{
boolean find = false;
System.out.println("start process");
for(int i = 0; i < data.length; i++)
...{
if(data[i].indexOf(s) != -1)
...{
dos.writeUTF(data[i] + ",");
dos.flush();
find = true;
System.out.println("find data");
}
}
if(!find)
...{
dos.writeUTF("cannot find the data");
}
}
}
Now the code should run again and again, but it also depened on throwing an exception. I don't think this should be a good idea. I will research this again when I was free.