Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java: Сети
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 313
1

Чат на сокетах

13.04.2016, 18:27. Просмотров 773. Ответов 11
Метки нет (Все метки)

Здравствуйте. Решил написать не большой чат на JAVA.
Опыта работы в JAVA немного. Собственно решил сделать 3 класса
NetWork - класс в котором объявляются и инициализируются все переменные клиент серверные переменные.
Client - отсюда отправляем сообщение
Server - Принимаются сообщения

Теперь о том как я это попытался реализовать

Класс NetWork
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
package Chat.network;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class NetWork extends Thread {
    
    public static int Port = 8283;
    public static String ip = "127.0.0.1";
    public static ServerSocket server = null;
    public static Socket socket = null;
    public static BufferedReader in = null;
    public static PrintWriter out = null;
    private String[][] Contact;
    
    public NetWork(){
        try {
            socket = new Socket(ip, Port);
            server = new ServerSocket(Port); 
            //Потоки для работы через сеть
            in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            out = new PrintWriter(socket.getOutputStream(), true);
            
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }           
    }
}
Класс Client

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package Chat.network;
 
import javax.swing.JOptionPane;
 
public class Client extends NetWork {
    
    public static void SendToServer(String message)
    { 
         //Передача серверу 
        out.print(message);
        out.flush();
        JOptionPane.showMessageDialog(null, message);
    }
}
Класс сервер
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package Chat.network;
 
import java.io.IOException;
 
public class Server extends NetWork{
 
    String messages = "";
        
    public Server(){
        try {  
            
            while (true) {
              messages = in.readLine();    
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    }
}
Есть еще 1 класс форма из которого я уже пытаюсь отправить сообщения

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 * To change this license header, choose License Headers in Project Properties.
package Chat.Forms;
 
...
 
public class MainForms extends javax.swing.JFrame {
 
static NetWork test = new NetWork();
 
....
 
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        //GEN-FIRST:event_jButton1ActionPerformed
        // TODO add your handling code here:
        Client.SendToServer("Test");
    }//GEN-LAST:event_jButton1ActionPerformed
 
 
}
По моей логике по нажатию кнопки клиент должен отправить сообщение ("Test") на сервер а затем вывести это сообщение на экран в диалоговом окне.

На деле получается вот что.
0
Миниатюры
Чат на сокетах  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2016, 18:27
Ответы с готовыми решениями:

Многопоточный сервер на сокетах
Задание: Написать многопоточный сервер на сокетах.Схема работы на подобии чата: клиент отправляет...

Сетевое соединение на сокетах
В университете дали задание по сетевым соединениям, вроде бы сделал по шаблону преподавателя (в...

Сервер java реализация на сокетах
Здравствуйте, уважаемые жители форума) Есть вопрос. Создание сервера на сокетах, в случае...

Клиент-серверное приложение на сокетах. Код выдает исключение
Здравствуйте! Пытаюсь разобраться с сокетами, на словах вроде все понятно, но чет собрать что-то...

Чат на сокетах
Проблема в работе чата: отправляется только первое сообщение, а дальше всё зависает....

11
Doctor_
237 / 236 / 142
Регистрация: 03.02.2011
Сообщений: 1,436
13.04.2016, 19:09 2
У вас в Network классе вообще ничего нет. Но есть нету accept клиентов и т.д.

Надо что сервер и клиент были две разные программы. Каждая в своём классе, и чтоб они запускались отдельно (у каждой свой мейн).
Сервер надо научить принимать клиентов и принимать из сообщения и высылать все остальным подключенным.
0
turbanoff
Эксперт Java
4031 / 3766 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
13.04.2016, 19:34 3
Че-то я не понял. Вы пытаетесь открыть серверный сокет (в конструкторе NetWork) и в клиенте и в сервере на одном и том же порту 8283.
Естественно это не взлетит. Нужно открывать один серверный сокет на сервере.
0
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 313
13.04.2016, 20:47  [ТС] 4
То есть вы хотите сказать что в NetWork обьявить порт и ip не получиться?
Строчку
Java
1
server = new ServerSocket(Port);
переместить в Server а строчку
Java
1
socket = new Socket(ip, Port);
по отдельности и в Server и в Client?
0
13.04.2016, 20:47
turbanoff
Эксперт Java
4031 / 3766 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
14.04.2016, 10:01 5
На сервере - открываете серверный сокет, вызываете accept() - accept вернёт вам клиентский сокет в сервере. (То есть клиентский сокет на сервере руками создавать не нужно)
На клиенте - открываете только клиентский сокерт.

Это же в любом туториале написано по сокетам - http://docs.oracle.com/javase/tutori...entServer.html
0
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 313
14.04.2016, 12:43  [ТС] 6
Да, я прочитал и понял это. И у меня возник не много другой вопрос.
Что если я хочу сделать чтоб одна и та же программа могла быть и передатчиком и приемником? Например на C++ builder можно кинуть 2 компонента на форма и программа сможет как принимать данные так и отправлять их, Можно ли такое же осуществить на JAVA?
0
turbanoff
Эксперт Java
4031 / 3766 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
14.04.2016, 15:38 7
Sluchayno, в классе Socket есть два метода getOutputStream() и getInputStream().
После того как соединение установилось. У вас и на клиенте и на сервере есть по одному объекту Socket.
Всё что вы запишите в OutputStream (полученный из getOutputStream) на сервере, клиент сможет прочитать из InputStream (полученный из getInputStream).
И наоборот: всё что вы запишите в OutputStream (полученный из getOutputStream) на клиенте, сервер сможет прочитать из InputStream (полученный из getInputStream).
0
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 313
14.04.2016, 17:28  [ТС] 8
Все равно не получается ((

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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server{
 
    String messages = "";
    private static PrintWriter out = null;
    private static BufferedReader in = null;
    public static int Port = 8283;
    public static String ip = "localhost";
    public static ServerSocket server = null;
    public static Socket socket = null;
    
    public Server() {       
        try {
            server = new ServerSocket(Port);
            socket = server.accept();
            setIn(new BufferedReader(new InputStreamReader(socket.getInputStream())));
            setOut(new PrintWriter(socket.getOutputStream(), true));
            } 
        catch (IOException e) { 
            e.printStackTrace(); 
        } 
    }
 
    public static PrintWriter getOut() {
        return out;
    }
 
    public static void setOut(PrintWriter out) {
        Server.out = out;
    }
 
    public static BufferedReader getIn() {
        return in;
    }
 
    public static void setIn(BufferedReader in) {
        Server.in = in;
    }
}
Client
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
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
 
import javax.swing.JOptionPane;
 
public class Client{
 
    private static PrintWriter out = null;
    private static int Port = 8283;
    private static String ip = "localhost";
    private static Socket clientSocket = null;
    
    public Client() {
        try{ 
            clientSocket = new Socket(ip, Port);
            out = new PrintWriter(clientSocket.getOutputStream(), true);    
        }
            catch (IOException e) { 
                e.printStackTrace(); 
            } 
    }
    
    public static void SendToServer(String message)
    { 
         //Передача серверу 
        out.print(message);
        out.flush();
        JOptionPane.showMessageDialog(null, message);
    }
}
Ошибка
java.net.BindException: Address already in use: JVM_Bind
at java.net.DualStackPlainSocketImpl.bind0(Native Method)
at java.net.DualStackPlainSocketImpl.socketBind(DualStackPlainSocketImpl.java:106)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:190)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at java.net.ServerSocket.<init>(ServerSocket.java:128)
at team.messanger.pro.network.Server.<init>(Server.java:22)
at team.messanger.pro.Forms.MainForms$1.windowOpened(MainForms.java:37)
at java.awt.Window.processWindowEvent(Window.java:2048)
at javax.swing.JFrame.processWindowEvent(JFrame.java:296)
at java.awt.Window.processEvent(Window.java:2009)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at team.messanger.pro.network.Client.SendToServer(Client.java:29)
at team.messanger.pro.Forms.MainForms.jButton1ActionPerformed(MainForms.java:104)
at team.messanger.pro.Forms.MainForms.access$0(MainForms.java:101)
at team.messanger.pro.Forms.MainForms$2.actionPerformed(MainForms.java:79)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at team.messanger.pro.network.Client.SendToServer(Client.java:29)
at team.messanger.pro.Forms.MainForms.jButton1ActionPerformed(MainForms.java:104)
at team.messanger.pro.Forms.MainForms.access$0(MainForms.java:101)
at team.messanger.pro.Forms.MainForms$2.actionPerformed(MainForms.java:79)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
0
turbanoff
Эксперт Java
4031 / 3766 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
16.04.2016, 17:55 9
Цитата Сообщение от Sluchayno Посмотреть сообщение
Address already in use: JVM_Bind
Порт уже кем-то занят. Может вы два раза Server создаёте? Попробуйте указать другой порт
0
Sluchayno
30 / 30 / 20
Регистрация: 22.09.2013
Сообщений: 313
18.04.2016, 20:22  [ТС] 10
Да я уже почитал кучу информации и понял в чем тут была ошибка, теперь проблема в другом. Я отправляю данные но на сервере они не приходят, вообще не понятно почему.

network.java
Java
1
2
3
4
5
6
7
8
9
10
package network;
 
public class NetWork{
    
    /**
     *
     */
    static int Port = 1234;
    static String ip = "localhost";
}
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
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
package network;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;
import static network.NetWork.Port;
 
public class Server extends Thread{
   
    static ServerSocket server = null;
    static Socket clientSocket = null;
    static InputStream in = null;
    static OutputStream out = null;
 
    /**
     *
     */
    public static BufferedReader reader = null;
    public Client client = null;
    public Server() {
        try {
            server = new ServerSocket(Port);
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Порт занят");
            System.exit(-1);
        }
        
        try {
            client = new Client();
            clientSocket = server.accept();
        } catch(IOException e) {
            JOptionPane.showMessageDialog(null, "Ошибка при ожидании данных от сервера");
            System.exit(-1);   
        }
        
         try {
            in = clientSocket.getInputStream();
        } catch (IOException e) {
           JOptionPane.showMessageDialog(null, "ошибка отправки данных");
            System.exit(-1);
        }
         
         reader = new BufferedReader(new InputStreamReader(in));
         
         start();
        }
    
    @Override
    public void run() {
         
        String message = "Просто тестовое сообщение";
        
        try {
            JOptionPane.showMessageDialog(null, "Пришло сообщение "+reader.readLine());
            while ((message = reader.readLine()) != null){
            JOptionPane.showMessageDialog(null, "Прило сообщение "+message);
            }
            } catch (IOException e) {
                JOptionPane.showMessageDialog(null, "Ошибка при получении данных");
                System.exit(-1);
            }
    }
    
    public static void Exit() {
        try {
            server.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Ошибка при отключении сервера");  
        }
    }
}
Client
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
package network;
 
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import javax.swing.JOptionPane;
import static network.NetWork.ip;
import static network.NetWork.Port;
 
 
public class Client{
    
    Socket socket = null;
    static BufferedReader reader = null;
    OutputStream out = null;
    private static BufferedWriter writer = null;
    
    public Client() {
        try {
            socket = new Socket(ip, Port);
        } catch (UnknownHostException e) {
           JOptionPane.showMessageDialog(null, "Ошибка при подключении к серверу"); 
           System.exit(-1);
        } catch (IOException e) {
           JOptionPane.showMessageDialog(null, "Не удалось создать подключение"); 
           System.exit(-1);
        }
        
        reader = new BufferedReader(new InputStreamReader(System.in));
        try {
            out = socket.getOutputStream(); 
        } catch (IOException e) {
           JOptionPane.showMessageDialog(null, "Ошибка чтения данных"); 
           System.exit(-1); 
        }
        
        writer = new BufferedWriter(new OutputStreamWriter(out));
}
    
    public static void SendToServer(String message)
    { 
        try {
            writer.write(message);
            writer.flush();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "Ошибка при отправки данных");
        }
    }
}
То есть когда я пытаюсь получить сообщение на сервере нет ни какой реакции (
0
turbanoff
Эксперт Java
4031 / 3766 / 743
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
19.04.2016, 13:51 11
Зачем вы создаёте объект Client внутри конструктора Server? Вы хотите чтобы сервер подключался сам к себе? Это надо убрать.
И ещё перенесите всю логику из конструкторов Client/Server - в метод run(). А метод start() лучше вызывать извне, а не в самом конструкторе.
0
Welemir1
Автоматизируй это!
1137 / 677 / 264
Регистрация: 30.03.2015
Сообщений: 2,528
21.04.2016, 19:41 12
Sluchayno, возьмите книгу незабвенного Хорстманна, там приводится пример простого чата, на его основе напишите свой.
0
21.04.2016, 19:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2016, 19:41

Чат на сокетах
Начал работу с сетью, пробую написать небольшой чат на tcp сокетах, на стороне сервера всё...

Чат на сокетах
Я создаю чат на С ++, только такой в котором 1 сервер который как и клиент также может отправлять и...

Чат на сокетах
Здрасьте. Знаю, что тема до невозможности бородатая, но возникла необходимость создания программы...


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

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

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