socet簡訊傳送與執行緒設計的問題

os586發表於2007-09-13
需求是這樣的,我從來沒有做過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());
}
}

相關文章