Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Levikov
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 12
#1

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

10.02.2015, 09:25. Просмотров 389. Ответов 0
Метки нет (Все метки)

Я только начал писать программы под андроид и это первая программа.

Программа - чат типа 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/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2015, 09:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите структуру сервера для программы чата (Программирование Android):

Что лучше использовать для смс чата для отображения текстов и рисунков - Программирование Android
Здравствуйте, скажите что лучше использовать для смс чата для отображения текстов, рисунков, пробовал список с значками, но список не...

Сервер для чата - Программирование Android
Добрый день форумчане!;) У меня есть вопрос к Вам. Начала писать приложение на Андроид и столкнулась с таким вопросом- сервер для...

Исходники для простого чата - Программирование Android
Пытаюсь найти код для простого чата - никаких облак и опенфаер; пара PHP страниц на своем сервере, 2-3 активити на клиенте. Можно тупо...

Стили для создания чата - Программирование Android
Добрый день все. Я пытаюсь создать чат на андройд для своего сайта. Вся суть передачи и получения данных мне известна, но так как я совсем...

Какой бесплатный модуль чата для Android и iOS использовать? - Программирование Android
Подскажите какой бесплатный модуль чата для Android и iOS использовать? Мы пишем приложение в которое нужно интегрировать самый простой...

Какой компонент использую для вывода сообщений на экран например чата? - Программирование Android
Вроде хорошо подходит edittext с отключенным форматированием, Но в нем все сообщения одного цвета . И еще как делаются прямоугольники со...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2015, 09:25
Привет! Вот еще темы с ответами:

Покритикуйте код моего сокет сервера для игрового чата - Java SE
С помощью пары уроков, сделал сервер для визуального чата, типа галактики знакомств. Интересны советы по упрощению и оптимизации. Там...

Подскажите структуру программы - Java SE
Есть задание Не могу определиться, Какие делать объекты, интерфейсы, коллекции. Программу сам напишу, только вот в проектировании...

Написан код сервера для чата, что дальше? Как установить на VPS Centos 6 ?! - C#
Доброго времени гос-да программисты. Возник вопрос о том, как же установить готовый код написанный на C#, на виртуальный сервер Centos...

Подскажите название чата для локальной сети! - Софт
Это не Nessi, я помню только что название начинается на &quot;с&quot;. Помогите! Это реально важно!


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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