Разработка программы передачи и приёма сообщений в локальной сети Microsoft



бет10/20
Дата06.01.2022
өлшемі175,31 Kb.
#13216
түріПротокол
1   ...   6   7   8   9   10   11   12   13   ...   20
Структура приёма сообщений

Прикладная программа, используя интерфейс WinAPI и встроенные функции Windows, постоянно опрашивает почтовый слот на наличие приходящего сообщения. В отличие от DOS, например, в котором данная реализация представляла бы бесконечный цикл и все ресурсы компьютера уходили бы на ожидание сообщения, операционная среда Windows позволяет создавать такие циклы без практической потери ресурсов, разделяя части программы на потоки (threads). При наличии сообщения в почтовом слоте оно передаётся в программу средствами NetBIOS. Почтовый слот может содержать в себе любое количество сообщений, независимо от того, когда они все будут востребованы данной программой.

Прием сообщений можно реализовать следующим образом:
import java.awt.event.KeyEvent;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.net.ServerSocket;

import java.net.Socket;
// Using Threads ..

public class SecondClient extends javax.swing.JFrame {


static Socket SendSocket = null;

//************************************************************************//

public SecondClient() {

initComponents();

SendArea.requestFocusInWindow();

setLocation(getWidth(), 0);

}
@SuppressWarnings("unchecked")

//

private void initComponents() {
jSplitPane1 = new javax.swing.JSplitPane();

jScrollPane1 = new javax.swing.JScrollPane();

RecievedArea = new javax.swing.JTextArea();

jScrollPane2 = new javax.swing.JScrollPane();

SendArea = new javax.swing.JTextArea();

SendButton = new javax.swing.JButton();

jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

setTitle("Second Client");


jSplitPane1.setDividerLocation(240);

jSplitPane1.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT);


RecievedArea.setColumns(20);

RecievedArea.setRows(5);

jScrollPane1.setViewportView(RecievedArea);
jSplitPane1.setTopComponent(jScrollPane1);
SendArea.setColumns(20);

SendArea.setRows(1);

SendArea.addKeyListener(new java.awt.event.KeyAdapter() {

public void keyPressed(java.awt.event.KeyEvent evt) {

SendAreaKeyPressed(evt);

}

});



jScrollPane2.setViewportView(SendArea);
jSplitPane1.setRightComponent(jScrollPane2);
SendButton.setText("Отправить");

SendButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

SendButtonActionPerformed(evt);

}

});
jLabel1.setForeground(new java.awt.Color(204, 0, 0));



jLabel1.setText(" ");
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addComponent(jSplitPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE)

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(163, 163, 163)

.addComponent(SendButton))

.addComponent(jLabel1))

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

);

layout.setVerticalGroup(



layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addComponent(jSplitPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 309, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addComponent(SendButton)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE)

.addComponent(jLabel1)

.addContainerGap())

);
pack();

}//


//************************************************************************//

private void SendButtonActionPerformed(java.awt.event.ActionEvent evt) {

SendMessage(SendArea.getText());

SendArea.setText("");

}

//************************************************************************//



//Click event, when the user press enter send the message the second client

private void SendAreaKeyPressed(java.awt.event.KeyEvent evt) {

if (KeyEvent.getKeyText(evt.getKeyChar()).equals("Enter")) {

SendButtonActionPerformed(null);

SendArea.setCaretPosition(0);

}

}



//************************************************************************//

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {

new SecondClient().setVisible(true);

}

});
OpenSocketAndRecieve();



}

//************************************************************************//

public static void OpenSocketAndRecieve() {
new Thread() {
@Override

public void run() {

try {

ServerSocket server = new ServerSocket(12346);



while (true) {

Socket socket = server.accept();

DataInputStream input = new DataInputStream(socket.getInputStream());

RecievedArea.append("\n" + input.readUTF());


}
} catch (Exception e) {

e.printStackTrace();

}

}

}.start();


}//end method

//************************************************************************//

public static void SendMessage(String text) {

try {


SendSocket = new Socket("127.0.0.1", 12345);

DataOutputStream out = new DataOutputStream(SendSocket.getOutputStream());

out.writeUTF("The Server Said : " + text);

RecievedArea.append("\n I said : " + text);

} catch (Exception e) {

System.out.println(e);

}
}//end method

// Variables declaration - do not modify

private static javax.swing.JTextArea RecievedArea;

private javax.swing.JTextArea SendArea;

private javax.swing.JButton SendButton;

private javax.swing.JLabel jLabel1;

private javax.swing.JScrollPane jScrollPane1;

private javax.swing.JScrollPane jScrollPane2;

private javax.swing.JSplitPane jSplitPane1;

// End of variables declaration

}

Процедура Timer1Timer является ядром получения сообщений, в то время как ShowMess – реализацией выдачи сообщения на экран в виде, понятном пользователю.



Строки

StatusBar1. Panels[0].Text:='Current message: '+IntToStr (current+1);

StatusBar1. Panels[1].Text:='Total number of messages: '+IntToStr (L. Count), входящие в состав данной процедуры, характеризуют номер сообщения по счёту всего количества сообщений и количество всех сообщений.

С учетом вышеописанного, пришедшее сообщение выглядит таким образом:



Рис. 1.12. Пример полученного сообщения


Используя кнопки навигации, можно легко просматривать все пришедшие сообщения, одновременно использую другие функции Messenger’a.

Рис. 1.13. Обзор пришедших сообщений


В данном разделе в части литературного обзора были рассмотрены общие положения, применяемые разработчиками программного обеспечения средств передачи информации в сетях Microsoft, даны основные подходы создания программ отправки и принятия сообщений; показан пример разработки данного программного обеспечения.

В разделе «Постановка задачи» были рассмотрены требования к системе.

Технический проект содержит общую структуру системы, структуру данных, связи между объектами, алгоритмические связи, простота использования подобных программ для пользователей, кратко описаны основные типы компонент и классов, используемые для написания программ отправки сообщений.

В рабочем проекте дана конфигурация технических средств, алгоритмы работы программы, структурная схема работы программы, показана иерархия форм, включая примеры диалога с пользователем и участки программного кода, описывающие важные процедуры системы отправки и принятия сообщений.

В целом представлена полная и объективная картина, отражающая содержание выполненных работ по проектированию программ работы с сетевыми протоколами операционных систем семейства Windows, созданию алгоритмов реализации аналогичного программного обеспечения и их программной реализации.

Разработка программ в среде Borland Delphi 5 относится к технологии RAD (Rapid Application Development) – быстрое создание приложений. До появления RAD‑средств делались попытки облегчить труд программиста, сделать этот труд более продуктивным, повысив этим быстродействие и удобство создания приложений. Первоначально появились интегрированные среды разработки – IDE (Integrated Development Environment), объединяющие компилятор, специальный текстовый редактор, ориентированный на работы с текстами на целевом языке программирования и средства отладки – трассировщик, дебаггер и другие. По сравнению с предыдущими средствами программирования это был большой шаг вперед, но затем появились CASE‑средства, которые позволяли максимально визуализировать процесс создания программы, но пользоваться ими было чересчур неудобно из-за их негибкости. В большинстве случаев написать достаточно сложную программу было очень трудно. Средства RAD, взяв все лучшее из интегрированных сред разработки и CASE систем, объединили гибкость работы с исходными текстами с удобством создания графического интерфейса пользователя – GUI (Graphic User Interface). К сожалению, большинство RAD‑средств не позволяют визуализировать логику самой программы, но и те методы, которые заложены в Delphi 5, позволяют поднять производительность разработки программ в 2–3 раза.





Достарыңызбен бөлісу:
1   ...   6   7   8   9   10   11   12   13   ...   20




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет