1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

THIẾT KẾ HỆ THỐNG TRUYỀN THÔNG

176 76 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

THIẾT KẾ HỆ THỐNG TRUYỀN THÔNG

MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG TRUYỀN THÔNG 1.1 Một số giao thức hệ thống truyền thông 1.1.1 Giao thức H.323 1.1.2 Giao thức SIP 1.1.3 Chuẩn nén âm hình ảnh 11 1.2 Truyền thông thời gian thực 12 1.2.1 Các khái niệm định nghĩa sử dụng RTP: 13 1.2.2 Thứ tự byte, alignment định dạng thời gian 15 1.3 Các giao thức truyền thông mạng Internet 15 1.4 Các mô hình ứng dụng giao thức TCP/IP: mô hình client – server, mô hình P2P 16 1.4.1 Bộ giao thức TCP/IP : 16 1.4.2 Dịch vụ mạng (Net service) : chương trình ứng dụng thực tác vụ hệ thống mạng 17 1.4.3 Mô hình Client-Server 17 1.4.3.1 Nhiệm vụ Client Server 18 1.4.3.2 Mô hình Client-Server dịch vụ WEB 19 1.4.3.3 Các chế độ giao tiếp 20 1.4.4 Mô hình Peer to Peer 22 1.4.4.1 Phân loại mạng đồng đẳng: 22 1.4.4.2 Ưu mạng đồng đẳng 23 1.5 Cơ chế giao tiếp liên trình (InterProccess Comunication) 23 1.6 Một số mô hình hệ thống truyền thông: 25 1.6.1 Hệ thống trả lời tự động IVR 25 1.6.1.1 Khái niệm 25 1.6.1.2 Các dịch vụ điển hình IVR 26 1.6.1.3 Các ưu điểm hệ thống IVR 27 1.6.1.4 CallXML-CCXML 27 1.6.2 Hộp thư thoại (voicemail) 28 1.6.3 Dịch vụ tin nhắn SMS 29 1.6.4 Voice over IP 31 1.6.4.1 Giới thiệu VoIP: 31 1.6.4.2 Ưu điểm VoIP so với PSTN: 31 1.6.4.2 Các hình thức truyền thoại mạng IP 33 1.6.4.3 Nguyên tắc mô hình hoạt động VoIP 33 1.6.4.4 Các nghi thức sử dụng hệ thống VoIP 34 1.6.4.5 Các vấn đề liên quan đến chất lượng dịch vụ 36 CHƯƠNG : LẬP TRÌNH JAVA 38 2.1 Lập trình hướng đối tượng lập trình có cấu trúc 2.1.1 Lập trình hướng chức 2.1.2 Lập trình hướng đối tượng 2.2 Lịch sử phát triển ngôn ngữ java 2.3 Máy ảo java trình biên dịch 2.4 Biên soạn chương trình phần mềm Notepad Ms Windows 2.4.1 Soạn thảo chương trình nguồn: Trang 38 39 41 41 43 44 44 2.4.2 Biên dịch thực thi chương trình 2.5 Các khái niệm ngôn ngữ java 2.5.1 Đối tượng 2.5.2 Lớp đối tượng 2.5.3 Trìu tượng hóa liệu 2.5.4 Bao bọc che dấu thông tin 2.5.5 Sự mở rộng, kế thừa lớp 2.5.6 Đa xạ ( tương ứng bội) nạp chồng 2.5.7 Liên kết động 2.5.8 Truyền thông điệp 2.5.9 Các ưu điểm lập trình hướng đối ượng 2.6 Các kiểu liệu 2.6.1 Kiểu liệu sở 2.6.2 Quy ước đặt tên lớp, tên đối tượng, tên phương thức 2.7 Các từ khóa java 2.8 Chú thích chương trình java (Comment) 2.9 Các phép toán 2.10 Cấu trúc chương trình java kiểu ứng dụng độc lập 2.11 Các cấu trúc điều khiển 2.11.1 Lệnh rẽ nhánh if 2.11.2 Lệnh switch 2.11.3 Lệnh while 2.11.4 Lệnh - while 2.11.5 Lệnh for 2.11.6 Lệnh break 2.11.7 Lệnh continue 2.11.9 Phép toán ? 2.11.10 Đọc đối số chương trình 2.11.11 Đổi chuỗi thành số 2.11.12 Ngoại lệ (EXCEPTION) 2.12 Lớp thành phần lớp đối tượng 2.12.1 Định nghĩa lớp 2.12.1 Định nghĩa hàm thành phần 2.12.3 Nạp chồng thành phần hàm 2.12.4 Viết đè hàm thành phần chế che bóng biến 2.13 Phạm vi thuộc tính kiểm soát truy nhập thành phần lớp 4.13.1 Phạm vi thành phần 2.13.2 Các thuộc tính kiểm soát truy cập thành phần lớp 2.14 Các kiểu ứng dụng 2.15 Làm việc với stream 2.15.1 Lớp java.io.InputStream 2.15.2 Lớp java.io.OutputStream 2.15.3 Nhập chuỗi từ InputStream 2.15.4 Xuất chuỗi OutputStream 2.16 Lập trình luồng (thread) 2.16.1 Các mức cài đặt luồng 2.16.1.1 Tiếp cận luồng mức người dùng 2.16.1.2 Tiếp cận luồng mức nhân hệ điều hành 2.16.2 Luồng java Trang 44 45 45 46 46 47 48 49 50 51 51 52 52 53 54 56 56 56 58 58 59 60 61 61 62 63 63 64 64 65 67 67 67 68 68 71 71 73 74 75 76 78 79 80 81 82 82 83 83 2.16.2.1 Độ ưu tiên luồng 86 2.16.3 Đồng hóa luồng 87 2.17 Mô hình ứng dụng truyền thông qua socket RPC 87 2.17.1 Mô hình ứng dụng socket 87 2.17.2 Mô hình ứng dụng RPC (Remote Procedure Call) 88 2.17.2.1 Giới thiệu 88 2.17.2.2 Kiến trúc chương trình Client-Server cài đặt theo chế lời gọi thủ tục xa 89 2.17.2.3 Kích hoạt phương thức xa (RMI- Remote Method Invocation ) 90 2.17.2.4 Kiến trúc chương trình 91 2.17.2.5 Các chế liên quan ứng dụng đối tượng phân tán 92 2.17.2.6 Cơ chế vận hành của ứng dụng Client-Server theo kiểu RMI 93 2.17.2.7 Các lớp hỗ trợ chương trình theo kiểu Client-Server Java 94 2.17.2.8 Xây dựng ứng dụng phân tán với RMI 95 Chương 3: LẬP TRÌNH TRUYỀN THÔNG QUA SOCKET 102 3.1 Đặc điểm socket 3.2 Socket hoạt động chế độ có nối kết 3.2.1 Đặc điểm socket hoạt động chế độ có nối kết 3.2.2 Thí dụ minh họa 3.2.2.1 Xây dựng chương trình Client chế độ có nối kết 3.2.2.2 Xây dựng chương trình Server chế độ có nối kết 3.3 Socket hoạt động chế độ nối kết 3.3.1 Đặc điểm socket hoạt động chế độ nối kết 3.3.2 Thí dụ minh họa CHƯƠNG 4: LẬP TRÌNH GIAO TIẾP VỚI CỔNG MÁY TÍNH 102 104 104 107 107 110 115 115 116 123 4.1 Lập trình cổng LPT 4.1.1 Đặc điểm cổng LPT 4.1.2 Các gói lớp liên quan đến lập trình cổng LPT 4.1.3 Thí dụ minh họa 4.2 Lập trình cổng COM 4.2.1 Đặc điểm cổng COM 4.2.2 Các gói lớp liên quan đến lập trình cổng COM 4.2.3 Thí dụ minh họa CHƯƠNG 5: THIẾT KẾ HỆ THỐNG TRUYỀN THÔNG 123 123 125 125 128 128 131 131 137 5.1 Điều khiển hệ thống java 5.1.1 Các lớp gọi hỗ trợ lập trình hệ thống java 5.1.2 Phát vị trí chuột 5.1.4 Phát kiện chuột phím nhấn 5.2 Mô hình ứng dụng truyền thông PC-PC 5.3 Mô hình ứng dụng truyền thông PC – Phone 5.4 Mô hình ứng dụng truyền thông PC – PSTN - Phone 5.5 Thí dụ minh họa Trang 137 137 139 140 141 141 141 141 CHƯƠNG 1: TỔNG QUAN VỀ HỆ THỐNG TRUYỀN THÔNG 1.1 Một số giao thức hệ thống truyền thông 1.1.1 Giao thức H.323 - H.323 chuẩn mở ITU-T (Telecommunication Standardization Sector of the International Telecommunications Union) phát triển cho việc điều khiển gọi ngang hàng, dựa sở H.320 ISDN Q.931 - H.323 cấu trúc chặt chẽ, phức tạp phù hợp với việc thực thi đặc tính thoại truyền thống - Tiêu chuẩn H.323 thiết kế cho truyền audio, video liệu qua mạng IP bao gồm Internet - Tiêu chuẩn H.323 bao gồm báo hiệu điều khiển gọi, truyền điều khiển đa phương tiện điều khiển băng thông cho hội nghị điểm - điểm đa điểm - Tiêu chuẩn H.323 bao gồm giao thức liệt kê bảng 2.1 Các thành phần hệ thống H.323: Các thành phần hệ thống H.323 mô tả hình 2.1 Bao gồm đầu cuối, cổng kết nối, thiết bị điều khiển cổng nối (gatekeeper) khối điều khiển đa điểm (MCU) Trang Hình 1.1 Các thành phần mạng H323 a Thiết bị đầu cuối: - Đầu cuối cung cấp thông tin điểm điểm đa điểm với đầu cuối khác - Đầu cuối H.323 bao gồm khối điều khiển hệ thống, khối truyền tải phương tiện, mã hoá audio giao diện với mạng IP - Phần thiết kế bị tùy chọn mã hoá video thiết bị truyền liệu b Cổng kết nối(Gateway): Cổng kết nối cung cấp giao diện hai mạng khác Cổng kết nối H.323 kết nối mạng H.323 với mạng H.323 PSTN Cổng kết nối chuyển đổi audio, video định dạng truyền liệu giao thức hệ thống thông tin Cổng kết nối cần thiết phải kết nối mạng phi H.323, khồng cần thiết kết nối thiết bị đầu cuối H.323 Thiết bị điều khiển cổng kết nối (Gatekeeper): Thiết bị điều khiển cổng kết nối tùy chọn, sử dụng không Thiết bị điều khiển cổng nối cung cấp dịch vụ trước diễn gọi dịch vụ điều khiển gọi cho điểm cuối H.323 Tuy nhiên thiết bị điều khiển cổng nối có mặt mạng có nhiệm vụ: biên dịch địa chỉ, điều khiển chấp nhận, điều khiển băng thông quản lý vùng Trang Các chức tùy chọn thiết bị điều khiển cổng nối bao gồm: báo hiệu điều khiển gọi, xác thực gọi, quản lý băng thông, quản lý gọi Khối điều khiển đa điểm (MCU) Khối điều khiển đa điểm điểm cuối (endpoint) hỗ trợ hội nghị ba thành viên nhiều MCU điển hình bao gồm điều khiển đa điểm (MC) nhiều xử lý đa điểm (MP) MC xử lý điều khiển báo hiệu để hỗ trợ hội nghị MP nhận liệu audio, video luồng liệu, xử lý phân bố chúng đến điểm cuối thành viên hội nghị đa điểm Bộ giao thức H.323 bao gồm nhiều giao thức Bộ giao thức hỗ trợ chấp nhận gọi, thiết lập trạng thái, giải phóng, luồng phương tiện tin hệ thống H.323 Các giao thức hỗ trợ chế truyền đưa gói tin cậy không Trang tin cậy qua mạng IP minh hoạ hình 2.3 Hình 1.2 Bộ giao thức H323 Bộ giao thức H.323 bao gồm vùng điều khiển : + Báo hiệu đăng ký, thừa nhận trạng thái (RAS) : báo hiệu RAS cung cấp điều khiển trước gọi mạng thiết bị điều khiển cổng nối H.323 + Báo hiệu điều khiển gọi (H.225) : dựa khuyến nghị H.225 ITU-T mà việc sử dụng tin hiệu Q.931 Kênh điều khiển gọi tin cậy TCP tao mạng IP với mã cổng 1720 + Điều khiển truyền tải thông tin Media (H.245 RTP/RTCP) : H.245 xử lý tin từ đầu đến cuối điểm cuối H.323 Thủ tục giao thức H.245 thiết lập kênh cho truyền audio, video liệu thông tin kênh điều khiển Truyền đa phương tiện H.323 cung cấp RTP RTCP Trình tự thiết lập gọi: Nếu xem xét cách chi tiết gọi hai đầu cuối H.323 thiết lập hình 2.4 Trang Hình 1.3 Trình tự thiết lập gọi Trước hết hai phải đăng ký thiết bị điều khiển cổng kết nối Đầu cuối A gửi yêu cầu tới thiết bị điều khiển cổng kết nối đề nghị thiết lập gọi Thiết bị điều khiển cổng nối gửi cho đầu A thông tin cần thiết đầu cuối B Đầu cuối A gửi tin SETUP tới đầu cuối B Đầu cuối B trả lời tin Call Proceeding đồng thời liên lạc với thiết bị điều khiển cổng nối để xác nhận quyền thiết lập gọi Đầu cuối B gửi tin cảnh báo kết nối Hai đầu cuối trao đổi số tin H.245 để xác định chủ tớ, khả xử lý đầu cuối thiết lập kết nối RTP Trang Đây trường hợp gọi điểm điểm đơn giản nhất, mà báo hiệu gọi không định tuyến tới thiết bị điều khiển cổng nối H.323 hỗ trợ nhiều kịch thiết lập gọi khác H.323 hệ thống ghép lai xây dựng từ thiết bị tập trung thông minh : thiết bị điều khiển cổng nối, MCU, cổng kết nối điểm cuối Mặc dù chuẩn H.323 phiên gần có phần toàn diện song vấn đề nảy sinh, thời gian thiết lập gọi dài, nhiều chức thiết bị điều khiển cổng nối phải thực khả nằng mở rộng sử dụng kiểu báo hiệu gọi định tuyến qua thiết bị điều khiển cổng nối (GKRCS) Khi cần sử dụng cổng kết nối dung lượng lớn để kết nối mạng PSTN, người ta sử dụng giao thức cổng đơn giản (SGCP : Simple Gateway Control Protocol) giao thức điều khiển cổng phương tiện (MGCP : Media Gateway Control Protocol) để thay giao thức cho cổng kết nối H.323 Các hệ thống điều khiển gọi hiệu hơn, đáp ứng nhu cầu nhà cung cấp cỡ lớn Cũng vậy, giao thức khởi tạo phiên SIP (Session Initiation Protocol) giải số tồn H.323 khả thay H.323 1.1.2 Giao thức SIP Giao thức khởi tạo phiên SIP (Session Initiation Protocol) giao thức điều khiển chuẩn hóa IETF Nhiệm vụ thiết lập, hiệu chỉnh xóa phiên làm việc người dùng Các phiên làm việc hội nghị đa phương tiên, Cuộc gọi điện thoại điểm-điểm,….SIP sử dụng kết hợp với chuẩn giao thức IETF khác SAP, SDP MGCP (MEGACO) để cung cấp lĩnh vực rộng cho dịch vụ VoIP Cấu trúc SIP tương tự với cấu trúc HTTP (giao thức client-server) Nó bao gồm yêu cầu gởi đến từ người sử dụng SIP client đến SIP server Server xử lý yêu cầu đáp ứng đến client Một thông điệp yêu cầu, với thông điệp đáp ứng tạo nên thực thi SIP SIP công cụ hỗ trợ hấp dẫn điện thoại IP lý sau: + Nó hoạt động vô trạng thái có trạng thái Vì vậy, hoạt động vô Trang trang thái cung cấp mở rộng tốt server trì thông tin trạng thái gọi thực (transaction) xử lý + Nó sử dụng nhiều dạng cú pháp giao thức chuyển siêu văn HTTP (Hypertext Transfer Protocol), vậy, cung cấp thuận lợi để hoạt động trình duyệt + Bản tin SIP (nội dung tin) không rõ rang, cú pháp Vì vậy, mô tả theo nhiều cách Chẳng hạn, mô tả với mở rộng thư Internet đa mục đích MINE (Multipurpose Internet Mail Extension) ngôn ngữ đánh dấu mở rộng XML (Extensible Markup Language) +Nó nhận dạng người dùng với định vị tài nguyên đồng URL (Uniform Resource Locator), vậy, cung cấp cho người dùng khả khởi tạo gọi cách nhấp vào liên kết trang web Nói chung, SIP hỗ trợ hoạt động sau: - Định vị trí người dùng - Định media cho phiên làm việc - Định sẵn sàng người dùng để tham gia vào phiên làm việc - Thiết lập gọi, chuyển gọi kết thúc B Cấu trúc SIP: Một khía cạnh khác biệt SIP giao thức xử lý gọi IP khác không sử dụng điều khiển Gateway Nó không dùng khái niệm Gateway/ điều khiển Gateway dựa vào mô hình client/server Server: chương trình ứng dụng chấp nhận tin yêu cầu để phục vụ yêu cầu gửi trả đáp ứng cho yêu cầu Server Proxy, gửi lại (redirect), UAS Registrar Proxy server: chương trình trung gian, hoạt động server client cho mục đích tạo yêu cầu thay mặt cho client khác Các yêu cầu phục vụ bên truyền chúng đến server khác Một proxy dịch cần thiết, tạo lại tin yêu cầu SIP trước chuyển chúng đến server khác UA Trong trường hợp trường Via Trang 10 } public String getFlowControlOutString() { return flowToString(flowControlOut); } public void setDatabits(int databits) { this.databits = databits; } public void setDatabits(String databits) { if (databits.equals("5")) { this.databits = SerialPort.DATABITS_5; } if (databits.equals("6")) { this.databits = SerialPort.DATABITS_6; } if (databits.equals("7")) { this.databits = SerialPort.DATABITS_7; } if (databits.equals("8")) { this.databits = SerialPort.DATABITS_8; } } public int getDatabits() { return databits; } public String getDatabitsString() { switch(databits) { case SerialPort.DATABITS_5: return "5"; case SerialPort.DATABITS_6: return "6"; case SerialPort.DATABITS_7: return "7"; case SerialPort.DATABITS_8: return "8"; default: return "8"; } Trang 162 } public void setStopbits(int stopbits) { this.stopbits = stopbits; } public void setStopbits(String stopbits) { if (stopbits.equals("1")) { this.stopbits = SerialPort.STOPBITS_1; } if (stopbits.equals("1.5")) { this.stopbits = SerialPort.STOPBITS_1_5; } if (stopbits.equals("2")) { this.stopbits = SerialPort.STOPBITS_2; } } public int getStopbits() { return stopbits; } public String getStopbitsString() { switch(stopbits) { case SerialPort.STOPBITS_1: return "1"; case SerialPort.STOPBITS_1_5: return "1.5"; case SerialPort.STOPBITS_2: return "2"; default: return "1"; } } public void setParity(int parity) { this.parity = parity; } public void setParity(String parity) { if (parity.equals("None")) { this.parity = SerialPort.PARITY_NONE; } Trang 163 if (parity.equals("Even")) { this.parity = SerialPort.PARITY_EVEN; } if (parity.equals("Odd")) { this.parity = SerialPort.PARITY_ODD; } } public int getParity() { return parity; } public String getParityString() { switch(parity) { case SerialPort.PARITY_NONE: return "None"; case SerialPort.PARITY_EVEN: return "Even"; case SerialPort.PARITY_ODD: return "Odd"; default: return "None"; } } private int stringToFlow(String flowControl) { if (flowControl.equals("None")) { return SerialPort.FLOWCONTROL_NONE; } if (flowControl.equals("Xon/Xoff Out")) { return SerialPort.FLOWCONTROL_XONXOFF_OUT; } if (flowControl.equals("Xon/Xoff In")) { return SerialPort.FLOWCONTROL_XONXOFF_IN; } if (flowControl.equals("RTS/CTS In")) { return SerialPort.FLOWCONTROL_RTSCTS_IN; } if (flowControl.equals("RTS/CTS Out")) { return SerialPort.FLOWCONTROL_RTSCTS_OUT; Trang 164 } return SerialPort.FLOWCONTROL_NONE; } String flowToString(int flowControl) { switch(flowControl) { case SerialPort.FLOWCONTROL_NONE: return "None"; case SerialPort.FLOWCONTROL_XONXOFF_OUT: return "Xon/Xoff Out"; case SerialPort.FLOWCONTROL_XONXOFF_IN: return "Xon/Xoff In"; case SerialPort.FLOWCONTROL_RTSCTS_IN: return "RTS/CTS In"; case SerialPort.FLOWCONTROL_RTSCTS_OUT: return "RTS/CTS Out"; default: return "None"; } }} Thực kết nối tới cổng nối tiếp: import javax.comm.*; import java.io.*; import java.awt.TextArea; import java.awt.event.*; import java.util.TooManyListenersException; public class SerialConnection implements SerialPortEventListener, CommPortOwnershipListener { private SerialParameters parameters; private OutputStream os; private InputStream is; private KeyHandler keyHandler; private CommPortIdentifier portId; private SerialPort sPort; private boolean open; private String receptionString=""; Trang 165 public String getIncommingString(){ byte[] bVal= receptionString.getBytes(); receptionString=""; return new String (bVal); } public SerialConnection(SerialParameters parameters) { this.parameters = parameters; open = false; } public void openConnection() throws SerialConnectionException { // System.out.println("OK "); // Obtain a CommPortIdentifier object for the port you want to open try { // System.out.println(parameters.getPortName()); portId = CommPortIdentifier.getPortIdentifier(parameters.getPortName()); } catch (NoSuchPortException e) { // System.out.println("Yes the problem is here "); e.printStackTrace(); // throw new SerialConnectionException(e.getMessage()); }catch(Exception e) { // System.out.println("ErrorErrorErrorError"); e.printStackTrace(); } //System.out.println(portId); //System.out.println("OK "); // Open the port represented by the CommPortIdentifier object Give // the open call a relatively long timeout of 30 seconds to allow // a different application to reliquish the port if the user // wants to try { sPort = (SerialPort)portId.open("SMSConnector", 30000); } catch (PortInUseException e) { Trang 166 throw new SerialConnectionException(e.getMessage()); } //System.out.println("OK "); sPort.sendBreak(1000); // Set the parameters of the connection If they won't set, close the // port before throwing an exception try { setConnectionParameters(); } catch (SerialConnectionException e) { sPort.close(); throw e; } // System.out.println("OK "); // Open the input and output streams for the connection If they won't // open, close the port before throwing an exception try { os = sPort.getOutputStream(); is = sPort.getInputStream(); } catch (IOException e) { sPort.close(); throw new SerialConnectionException("Error opening i/o streams"); } //System.out.println("OK "); try { sPort.addEventListener(this); } catch (TooManyListenersException e) { sPort.close(); throw new SerialConnectionException("too many listeners added"); } //System.out.println("OK "); // Set notifyOnDataAvailable to true to allow event driven input sPort.notifyOnDataAvailable(true); // Set notifyOnBreakInterrup to allow event driven break handling sPort.notifyOnBreakInterrupt(true); // Set receive timeout to allow breaking out of polling loop during // input handling Trang 167 try { sPort.enableReceiveTimeout(30); } catch (UnsupportedCommOperationException e) { } //System.out.println("OK "); // Add ownership listener to allow ownership event handling portId.addPortOwnershipListener(this); open = true; } public void setConnectionParameters() throws SerialConnectionException { // Save state of parameters before trying a set int oldBaudRate = sPort.getBaudRate(); int oldDatabits = sPort.getDataBits(); int oldStopbits = sPort.getStopBits(); int oldParity = sPort.getParity(); int oldFlowControl = sPort.getFlowControlMode(); // Set connection parameters, if set fails return parameters object // to original state try { sPort.setSerialPortParams(parameters.getBaudRate(), parameters.getDatabits(), parameters.getStopbits(), parameters.getParity()); } catch (UnsupportedCommOperationException e) { parameters.setBaudRate(oldBaudRate); parameters.setDatabits(oldDatabits); parameters.setStopbits(oldStopbits); parameters.setParity(oldParity); throw new SerialConnectionException("Unsupported parameter"); } // Set flow control try { sPort.setFlowControlMode(parameters.getFlowControlIn() | parameters.getFlowControlOut()); } catch (UnsupportedCommOperationException e) { Trang 168 throw new SerialConnectionException("Unsupported flow control"); } } public void closeConnection() { // If port is alread closed just return if (!open) { return; } // Remove the key listener // messageAreaOut.removeKeyListener(keyHandler); // Check to make sure sPort has reference to avoid a NPE if (sPort != null) { try { // close the i/o streams os.close(); is.close(); } catch (IOException e) { System.err.println(e); } // Close the port sPort.close(); // Remove the ownership listener portId.removePortOwnershipListener(this); } open = false; } public void sendBreak() { sPort.sendBreak(1000); } public boolean isOpen() { return open; } public void serialEvent(SerialPortEvent e) { // Create a StringBuffer and int to receive input data StringBuffer inputBuffer = new StringBuffer(); int newData = 0; // Determine type of event Trang 169 switch (e.getEventType()) { // Read data until -1 is returned If \r is received substitute // \n for correct newline handling case SerialPortEvent.DATA_AVAILABLE: while (newData != -1) { try { newData = is.read(); if (newData == -1) { break; } if ('\r' == (char)newData) { inputBuffer.append('\n'); } else { inputBuffer.append((char)newData); } } catch (IOException ex) { System.err.println(ex); return; } } // Append received data to messageAreaIn receptionString=receptionString+ (new String(inputBuffer)); //System.out.print("'" +message +"' sent"); Xử lý ngoại lệ cổng nối tiếp: public class SerialConnectionException extends Exception { Trang 171 public SerialConnectionException(String str) { super(str); } public SerialConnectionException() { super(); } } Tện Sender.java thực gửi tin nhắn tới số điện thoại: import java.util.Date; public class Sender implements Runnable { private static final long STANDARD=500; private static final long LONG=2000; private static final long VERYLONG=20000; SerialConnection mySerial =null; static final private char cntrlZ=(char)26; String in, out; Thread aThread=null; private long delay=STANDARD; String recipient=null; String message=null; private String csca="+6596845999"; // the message center private SerialParameters defaultParameters= new SerialParameters ("COM2",9600,0,0,8,1,0); public int step; public int status=-1; public long messageNo=-1; public Sender(String recipient, String message){ this.recipient=recipient; this.message=message; } public int send () throws Exception{ SerialParameters params = defaultParameters; mySerial =new SerialConnection (params); mySerial.openConnection(); aThread=new Thread(this); aThread.start() ; //log("start"); Trang 172 return 0; } public void run(){ boolean timeOut=false; long startTime=(new Date()).getTime(); while ((step delay; //if atz does not work, type to send cntrlZ and retry, in case a message was stuck if (timeOut && (step==1)) { step=-1; mySerial.send( ""+cntrlZ); } //read incoming string String result= mySerial.getIncommingString() ; // log (""); // log ("received ok ="+expectedResult); if (expectedResult>-1){ mySerial.send(message+cntrlZ); startTime=(new Date()).getTime(); }else{ step=step-1; } delay=VERYLONG;//waitning for message ack break; case 6: Trang 174 expectedResult=result.indexOf("OK"); //read message number if (expectedResult>-1){ int n=result.indexOf("CMGS:"); result=result.substring(n+5); n=result.indexOf("\n"); status=0; messageNo=Long.parseLong(result.substring(0,n).trim() ); log ("sent message no:"+messageNo); }else{ step=step-1; } break; } step=step+1; aThread.sleep(100); }catch (Exception e){ e.printStackTrace(); } } mySerial.closeConnection() ; //if timed out set status if (timeOut ) { status=-2; log("*** time out at step "+step+"***"); } } private void log(String s){ System.out.println (new java.util.Date()+":"+this.getClass().getName()+":"+s); } } Thực gửi tin nhắn: public class SMSClient implements Runnable{ public final static int SYNCHRONOUS=0; public final static int ASYNCHRONOUS=1; private Thread myThread=null; private int mode=-1; Trang 175 private String recipient=null; private String message=null; public int status=-1; public long messageNo=-1; public SMSClient(int mode) { this.mode=mode; } public int sendMessage (String recipient, String message){ this.recipient=recipient; this.message=message; //System.out.println("recipient: " + recipient + " message: " + message); myThread = new Thread(this); myThread.start(); // run(); return status; } public void run(){ Sender aSender = new Sender(recipient,message); try{ //send message aSender.send (); // System.out.println("sending "); //in SYNCHRONOUS mode wait for return : for OK, -2 for timeout, -1 for other errors if (mode==SYNCHRONOUS) { while (aSender.status == -1){ myThread.sleep (1000); } } if (aSender.status == 0) messageNo=aSender.messageNo ; }catch (Exception e){ e.printStackTrace(); } this.status=aSender.status ; aSender=null; }} Trang 176

Ngày đăng: 05/11/2016, 14:19

Xem thêm: THIẾT KẾ HỆ THỐNG TRUYỀN THÔNG

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w