socet短信发送与线程设计的问题

07-09-13 os586

需求是这样的,我从来没有做过socket与线程的东西:现在有这样的需求:

一个小灵通短信发送平台,我们的现在是使用客户端的socket然后向小灵通平台服务发送一个串,串的格式是这样的:

out.println("<FROM:10060><TO:" + called_num + "><MSG: DY " + info + ">\r\n");

这其中变量 called_num是电话号码,而info是短信内容

要求有短信群发,并且要求反馈回正确的短信发送结果。

平台上是这样提供的:

当你发送成功后,会返回ST_OK的串值,失误则会发送ST_ER,

现在有一个重要通知要发送,发送前选中要发送的人,包括群发。然后提交后会有一个反馈结果:比如是给****发送成功,给****发送失误。并且要求支持有重发功能,但是如果使用重发功能的话,这个返回结果就会很慢才出来,因为要等它发送规定的次数后才会显示结果,这个问题需要如何解决?

另外一点,我们需要进行线程设计,把小灵通短信发送这一部分单独拿出来。比如说通知内容是一部分,小灵通发送可以放到线程当中这样设计是否合理?而反馈结果要写入数据库表当中,这样的话我应当在线程中的哪个部分处理?

还有一点就是,在socket当中进行读取返回值时,会不会很慢?

线程这一部分我该如何设计?希望各位做过socket的朋友给些意见,这个问题困挠我好久了,急死人了!

下面附上短信发送的函数:

public void SMSsend(String phone, String sms) {

//BufferedReader in;

BufferedInputStream in;

PrintWriter out;

String called_num = phone;

String info = sms;

try {

socket = new Socket(hostIP, Integer.parseInt(hostPort));

//in = new BufferedReader( new InputStreamReader(socket.getInputStream()));

in = new BufferedInputStream(socket.getInputStream());

out = new PrintWriter(socket.getOutputStream(), true);

out.println("<FROM:10060><TO:" + called_num + "><MSG: DY " + info + ">\r\n");

byte[] tmp=new byte[5];

in.read(tmp);

String str=new String(tmp);

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

slangmgh
2007-09-14 09:19

1. 使用异步IO解决等待的问题。

2. 可以使用concurrent包作为简单的线程框架。