Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
ttrrrww
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 8
1

Односторонний чат

15.07.2013, 21:47. Просмотров 1086. Ответов 5
Метки нет (Все метки)

Здравствуйте! Планирую сделать что-то типа односторонего чата. Взял за пример чат на скоетах.

Server:
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
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
   public Server(){
      try{
            ServerSocket server = null;
            Socket client;
            
            server = new ServerSocket(1234);    // слушаем порт 1234
            client = server.accept();                    //ждем подключения клиента
          
            System.out.println("Got client");  //оповещаем, что клиент подключен
            
            PrintWriter out = null;
            BufferedReader in = null;
            
            in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
            out = new PrintWriter(client.getOutputStream(),true);
           
            String input;
 
            while ((input = in.readLine()) != null) {
                if (input.equalsIgnoreCase("quit")) {
                    break;
                }
                out.println("Server> " + input);  //отвечаем клиенту
                System.out.println(input);
            }          
            out.close();                              
            in.close();
            client.close();
            server.close();
            
            System.out.println("Server closed");
        } catch(Exception e){
            System.out.println(e.getMessage());
        }  
 }
 
 public static void main(String[] args) {
          new Server();                                          //запускаем 
   }
}
Клиент:
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
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
 
public class Client {
 
  public Client(){
    try {
            Socket clientSocket = null;
            clientSocket = new Socket("127.0.0.1", 1234); // 127.0.0.1-IP где запущен Server,1234 - порт
 
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader inu = new BufferedReader(new InputStreamReader(System.in));
 
            String user, server;
 
            System.out.println("Server >");
            while ((user = inu.readLine()) != null) {
                out.println(user);
                server = in.readLine();
                System.out.println(server);
                if (user.equalsIgnoreCase("quit")) {
                    break;
                }
            }
            out.close();
            in.close();
            inu.close();
            clientSocket.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
 }
  
 public static void main(String[] args) {
           new Client();
     }
}

Проблема вот в чём:
Java
1
clientSocket = new Socket("127.0.0.1", 1234); // 127.0.0.1-IP где запущен Server,1234 - порт
В примере указан, как я понимаю, случай для локального сервера, для запуска на одном компьютере. Как быть с работой через интернет? Как клиенту узнать адрес сервера, без его ввода в тект прогаммы, как в примере?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 21:47
Ответы с готовыми решениями:

Односторонний чат
Здравствуйте! Собираюсь сделать что-то типа одностороннего чата. Грубо говоря, в одной "форме-окне"...

Односторонний чат: не работает после первого сообщения
Есть приложение - односторонний чат, но отправляет только одно сообщение. Код отправляющего...

Односторонний доступ
Подскажите, пожалуйста, как разрешить доступ начальнику к компьютерам своего отдела, а сотрудникам...

односторонний предел
\lim_{x\to 0+}x = 0, \lim_{x\to 0+}x^x = 1, \lim_{x\to 0+}x^{x^x} = 0 Чему равен предел...

Односторонний список.
Помогите решить задачу. Дается односторонний список список с элементами со следующей структурой:...

5
Care
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
15.07.2013, 23:31 2
Цитата Сообщение от ttrrrww Посмотреть сообщение
Как клиенту узнать адрес сервера, без его ввода в тект прогаммы, как в примере?
Сокеты на этом и основаны что клиент должен знать на каком адресе находиться сервер. Можно организовать мастер (или логин сервер) который хранит адреса зареганых чат-серверов в регистре ОС. Тогда нужно знать адрес только Мастер сервера.

Добавлено через 2 минуты
Цитата Сообщение от ttrrrww Посмотреть сообщение
server = new ServerSocket(1234);
Тут сервер регистрируется на текущем IP , то есть IP который вы используете и его явно писать не нужно.
1
ttrrrww
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 8
15.07.2013, 23:40  [ТС] 3
Можете дать ссылку на годный пример? Из названия сервера следует, что будет нужна регистрация? Мне это не особо подходит. Мне бы просто, чтобы клиент запустил приложение - ввёл текст - он отправился на сервер. Или это только в моём воображение всё так просто?

Добавлено через 1 минуту
Цитата Сообщение от Care Посмотреть сообщение
Тут сервер регистрируется на текущем IP , то есть IP который вы используете и его явно писать не нужно.
Ну, это для сервера. Клиенту-то нужно как-то узнать этот адрес...
0
Care
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
15.07.2013, 23:48 4
Цитата Сообщение от ttrrrww Посмотреть сообщение
Ну, это для сервера. Клиенту-то нужно как-то узнать этот адрес...
Ну вы должны знать его иначе не как...
Цитата Сообщение от ttrrrww Посмотреть сообщение
Мне бы просто, чтобы клиент запустил приложение - ввёл текст - он отправился на сервер. Или это только в моём воображение всё так просто?
Ну это очень просто. Вроде бы как ваш пример это и делает.
1
ttrrrww
0 / 0 / 0
Регистрация: 01.06.2013
Сообщений: 8
16.07.2013, 12:46  [ТС] 5
Хорошо, спасибо. Решил перенести клиент на формы. Возник ещё вопрос. У меня в проекте есть публичный JTextField a1. Как сделать чтобы пользователь, вводил в этот JTextField тект, нажимал на кнопку и сообщение отправлялось на сервер? И можно-ли, в таком случае, оставить сервер без изменений?

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
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
      
        Socket clientSocket = null;
        try {
            clientSocket = new Socket("95.67.162.158", 25); // 127.0.0.1-IP где запущен Server,1234 - порт
        } catch (UnknownHostException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
 
            BufferedReader in = null;
        try {
            in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
            PrintWriter out = null;
        try {
            out = new PrintWriter(clientSocket.getOutputStream(), true);
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
            BufferedReader inu = new BufferedReader(new InputStreamReader(System.in));
 
            
            String user, server;
   
        try {
            while ((user = inu.readLine()) != null) {
                out.println(user);
                server = in.readLine();
                
                System.out.println(server);
                
                if (user.equalsIgnoreCase("quit")) {
                    break;
                }
            }
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
            out.close();
        try {
            in.close();
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            inu.close();
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            clientSocket.close();
        } catch (IOException ex) {
            Logger.getLogger(FrameLeta.class.getName()).log(Level.SEVERE, null, ex);
        }
       
       
    }
0
Care
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
16.07.2013, 13:54 6
Лучше всего применить шаблон MVC который поможет разделить все основные составляющие программы на модел, контроллер и представление . А если быстро и просто , то воткни кнопку при нажатие которой у JTextFeild в обработчке кнопки будет вызываться метод getText Поля ( JTextFeild) и отправлять на сервер.
1
16.07.2013, 13:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 13:54

Односторонний предел
\lim_{x\to\frac{\pi}{2}-0}\frac{1}{\sqrt{2}}arctg\frac{tgx}{\sqrt{2}}

Односторонний пинг по WLAN
Помогите пожалуйста разобраться. Есть сеть LAN на ПК1 и есть подключение WLAN на этой эе машите....

Односторонний звук в Скайпе
При общении в Скайпе звук проходит только с одной стороны, причём в один день с одной, в другой - с...


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

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

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