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



бет9/20
Дата06.01.2022
өлшемі175,31 Kb.
#13216
түріПротокол
1   ...   5   6   7   8   9   10   11   12   ...   20
Рабочий проект

Интерфейс программы

Главная форма содержит следующие компоненты:

– Основное меню, состоящее из пунктов работы с сообщениями и опции для работы с программой.

– Кнопки для быстрой работы с сообщениями:



  1. Кнопка «Send» предназначена для посылки сообщения на имя другого компьютера или группу.

  2. Кнопка «Delete» удаляет текущее просмотренное сообщение.

  3. Кнопки навигации по сообщениям:

а) Кнопка «<» осуществляет просмотр предыдущего сообщения.

б) Кнопка «>» осуществляет просмотр следующего сообщения.

– Строка состояния, показывающая текст «No Message» при отсутствии сообщений и информацию об отправителе, получателе и времени получения сообщения при их наличии.

– Окно для просмотра сообщений.



– Номер текущего сообщения и их общее количество; полезно при навигации и при получении большого количества сообщений.

Рис. 1.6. Главное окно программы отправки и получения сообщений.


Описание с методы работы с программой Messenger

Основное меню состоит из следующих подменю:

– Messages. Состоит из следующих всплывающих подменю:

Send, Previous, Next, Delete, Delete All и Exit.

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

Подменю Delete All удаляет сразу все пришедшие сообщения.

Подменю Exit осуществляет выход из программы.

– Данное подменю содержит параметры для работы с программой.

– History. Содержит историю отправленных и полученных сообщений.

– Help. Содержит информацию о работе с программой.



Рассмотрим отдельно каждую форму.

Рис. 1.7. Настройки программы




  1. Play sound when new message arrives – Включение/отключение звука, подающегося на колонки через звуковую плату при получении сообщения.

  2. Always on top – При включении данной опции окно программы будет всегда находиться поверх других окон

  3. Pop up dialog on message receipt – При включении данного параметра окно программы будет всплывать при получении сообщения.


Рис. 1.8. Окно истории сообщений



Рис. 1.9. Окно отправки сообщения


Рассмотрю более подробно визуальный процесс посылки сообщения.

При нажатии на кнопку «Send» быстрой работы с сообщениями, равно как и при вызове всплывающего подменю Send из меню Messages, вызывается новое окно, на котором находится:



  1. Выбор получателя сообщений:

a) User or Computer. Им может являться имя пользователя, зашедшего в сеть Microsoft либо имя компьютера.

б) Workgroup. Сообщение можно послать на любую группу Win9x, в которую могут быть включены компьютеры.



  1. Окно для написания получателя сообщений.

  2. Окно сообщения.

  3. Кнопка «Send» для отправления сообщения.

  4. Кнопка «Cancel» для отмены отправления сообщения.

  5. Кнопка «Select» для выбора адресата получателя.

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

При нажатии на кнопку «Select» вызывается окно поиска всех групп и компьютеров, находящихся в данной локальной сети.



Пользователю достаточно просто выбрать имя в ListBox’e и нажать кнопку «OK», после чего выбранное имя автоматически отобразиться в окне получателя сообщения.

Рис. 1.10. Выбор адресата получателя


Поиск компьютеров в локальной сети

Приведём пример кода программы, реализующую поиск компьютеров в локальной сети Microsoft.


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 FirstClient extends javax.swing.JFrame {


static Socket SendSocket = null;
public FirstClient() {

//Draw GUI

initComponents();

SendArea.requestFocusInWindow();

}

//This code generated with netbeans for GUI and events.



@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("First 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()

.addGap(163, 163, 163)

.addComponent(SendButton)

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

.addGroup(layout.createSequentialGroup()

.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 388, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(0, 0, 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, 22, Short.MAX_VALUE)

.addComponent(jLabel1))

);
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[]) {

//Run the thread

java.awt.EventQueue.invokeLater(new Runnable() {


public void run() {

new FirstClient().setVisible(true);

}

});
OpenSocketAndRecieve();



}

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

public static void OpenSocketAndRecieve() {

new Thread() {

@Override

public void run() {

try {

ServerSocket server = new ServerSocket(12345);



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", 12346);

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



}
Используя функции NetBIOS, процедура Tform2.NBName определяет. является ли адресат пользователем удалённой машины или данное имя является самим компьютером, а также, не является ли адресат рабочей группой сети Microsoft.

Также, часть данной процедуры определяет, запущена или нет на данной машине ещё одна программа «всплывающих сообщений». Так как для совместимости с аналогичными программами требуется указать одно и то же имя почтового слота (в данном случае, имя компьютера, на котором запущено данное приложение), то при наличии другой подобной программы показывается окно с кодом ошибки. Код ошибки определяется средствами NetBIOS и в данной дипломной работе реализована процедурой NBName.


Рис. 1.11. Ошибка при создании почтового слота

Коды ошибок, выдаваемые NetBIOS, указаны в техническом проекте.



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




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

    Басты бет