С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Levikov
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 22
1

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

10.02.2015, 09:25. Просмотров 428. Ответов 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
Ответы с готовыми решениями:

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

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

Стили для создания чата
Добрый день все. Я пытаюсь создать чат на андройд для своего сайта. Вся суть...

Исходники для простого чата
Пытаюсь найти код для простого чата - никаких облак и опенфаер; пара PHP...

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

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

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

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

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


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

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

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