Форум программистов, компьютерный форум CyberForum.ru

Подскажите структуру сервера для программы чата - Android

Восстановить пароль Регистрация
 
Levikov
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 8
10.02.2015, 09:25     Подскажите структуру сервера для программы чата #1
Я только начал писать программы под андроид и это первая программа.

Программа - чат типа IRC. Есть сервер который подключает каждого нового пользователя командой

threads[i] = new clientThread(clientSocket, threads)).start();

clientThread
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
 
package aboullaite;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
 
 
/**
 *
 * @author mohammed
 */
 
 
// For every client's connection we call this class
public class clientThread extends Thread{
     private String name = null;
  private BufferedReader is = null;
  private PrintStream os = null;
  private Socket clientSocket = null;
  private final clientThread[] threads;
  private int maxClientsCount;
 
 
  public clientThread(Socket clientSocket, clientThread[] threads) {
    this.clientSocket = clientSocket;
    this.threads = threads;
    maxClientsCount = threads.length;
 
  }
 
  public void run() {
    int maxClientsCount = this.maxClientsCount;
    clientThread[] threads = this.threads;
 
 
    try {
      /*
       * Create input and output streams for this client.
       */
      is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
//      is = new DataInputStream(clientSocket.getInputStream());
      os = new PrintStream(clientSocket.getOutputStream());
 
      name=is.readLine().trim();
     /* while (true) {
        os.println("Enter your name.");
        name = is.readLine().trim();
        if (name.indexOf('@') == -1) {
          break;
        } else {
          os.println("The name should not contain '@' character.");
        }
      }
 
      /* Welcome the new the client.
      os.println("Welcome " + name
          + " to our chat room.\nTo leave enter /quit in a new line.");
      synchronized (this) {
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] != null && threads[i] == this) {
            clientName = "@" + name;
            break;
          }
        }
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] != null && threads[i] != this) {
            threads[i].os.println("*** A new user " + name
                + " entered the chat room !!! ***");
          }
        }
      }
      /* Start the conversation. */
      while (true) {
        String line = is.readLine();
        if (line.startsWith("/quit")) {
          break;
        }
        /* If the message is private sent it to the given client. */
        if (line.startsWith("@")) {
              synchronized (this) {
                for (int i = 0; i < maxClientsCount; i++) {
                  if (threads[i] != null && threads[i] != this)
                  {
                    threads[i].os.println(line);
                    /*
                     * Echo this message to let the client know the private
                     * message was sent.
                     */
                    this.os.println(line);
                    break;
                  }
                }
              }
        } else {
          /* The message is public, broadcast it to all other clients. */
          synchronized (this)
            {
            for (int i = 0; i < maxClientsCount; i++) {if (threads[i] != null) threads[i].os.println(line);}
            }
        }
      }
      synchronized (this) {
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] != null && threads[i] != this) {
            threads[i].os.println("*** The user " + name
                + " is leaving the chat room !!! ***");
          }
        }
      }
      os.println("*** Bye " + name + " ***");
 
      /*
       * Clean up. Set the current thread variable to null so that a new client
       * could be accepted by the server.
       */
      synchronized (this) {
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] == this) {
            threads[i] = null;
          }
        }
      }
      /*
       * Close the output stream, close the input stream, close the socket.
       */
      is.close();
      os.close();
      clientSocket.close();
    } catch (IOException e) {
    }
  }
}
Как только один пользователь пишет сообщение оно в for`e пробегает по всем threads[i] и передает сообщение всем подключенным. Подскажите как лучше организовать сервер, чтобы сообщения передавались только тем пользователям кто есть в канале. Сообщение уходит в виде JSONa

Mesage
Java
1
2
3
4
5
public class Message {
    private String StrDate;
    private String ChatChannel;
    private String fromName;
    private String message;}
Пока у меня мысль сделать в clientThread нечто типа String[] Channel, где передавать все каналы, которые открыты у пользователя. но получится ли это делать?


Сервер взят отсюда http://aboullaite.com/socket-programming-android-swing/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2015, 09:25     Подскажите структуру сервера для программы чата
Посмотрите здесь:

Выкачать XML с сервера или сайта для последующего парсинга Android
Android Подскажите среду для разработки
Общая база для android и ios. Реализация сервера на php Android
Стили для создания чата Android
Android Get и Post обязательный атрибут для клиент-сервера Android?
Android Вставка картинки у SMS чата
Что лучше использовать для смс чата для отображения текстов и рисунков Android
Сервер для чата Android
Android Какой компонент использую для вывода сообщений на экран например чата?
Написание чата с нуля Android
Android Какой бесплатный модуль чата для Android и iOS использовать?
Исходники для простого чата Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru