Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/43: Рейтинг темы: голосов - 43, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 6

Создание Видео-чата

07.01.2011, 14:38. Показов 8128. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! С С Новым Годом всех )
Пишу сюда с очень большой надеждой на помощь, т.к. курсовую надо уже скоро сдавать...
Вобщем смысл задания таков: Сделать видео-чат для 2-х клиентов без подключения каких-либо сторонних библиотек (например JMF).
Вот мои идеи:
Есть сервер, который пересылает данные от одного клиента к другому. Эти клиенты реализованы через апплет, который открывается через браузер посредством html-файла. Этот апплет содержит 1 кнопку "Отправить". При нажатии этой кнопки клиент отправляет *.swf файл со своего компьютера второму клиенту. И у второго клиента в браузере только появляется стандартное окошко с опциями: Открыть, Сохранить, Отменить и т.п. ) Соответственно второй клиент тоже может проделывать аналогичную операцию отправки файла )
Впринципе всё понятно, но я честно говоря что-то уже заколебался... Можт это последствия Нового Года...
Помогите пожалуйста реализовать это клиент-серверное приложение! Может быть, у кого-то есть какие-то наработки, может кому-то уже надоело отдыхать в новогодние праздники... Или может у кого-то есть другие идеи реализации.
Очень сильно буду благодарен!

Добавлено через 17 часов 0 минут
Вот примерный код для клиента и сервера. При нажатии на кнопку апплет виснет... И если прервать его выполнение, то вылезает ошибка:
Java
1
2
    at java.net.SocketOutputStream.socketWrite0(Native Method)
    at java.net.SocketOutputStream.socketWrite(Unknown Source)
Всё вроде правильно: клиент считывает файл побайтово и отправляет через сокет серверу. Сервер принимает и записывает в байтовый массив и далее отправляет этот байтовый массив второму клиенту. У второго клиента этот файл принимается и записывается в указанную директорию.

Клиент:
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
public class ClientChat extends JApplet
{
    
    
    private static final long serialVersionUID = 2L;
    int b;
    File ReadFile= new File("C:\\Workispaci\\HelloWorld\\FILES\\1.swf");
    FileInputStream fis;
    static Socket s;
    Thread t;
    int bytesRead;
    byte[] buffer = new byte[1024] ;
    
    
    Container c = new Container ();
    JLabel l1 =new JLabel ("Отправить файл");
    static JButton b1=new JButton("Отправить");
    JButton b2=new JButton("Принять");
    JPanel p1= new JPanel();
    JPanel p2= new JPanel();
    JPanel p3= new JPanel();
    
    public void init()
    {
        setSize(400,200);
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) 
            {
                try 
                {
                    //s=new Socket("87.224.227.164",15000);
                    fis=new FileInputStream(ReadFile);
                    DataOutputStream dos=new DataOutputStream(s.getOutputStream());
                    
                    while ((bytesRead = fis.read(buffer)) != -1 ) {
                    dos.write(buffer, 0, bytesRead);
                    }
                    fis.close();
                    dos.flush();
                    dos.close();
                    
                } 
                catch (FileNotFoundException e1) 
                {
                    e1.printStackTrace();
                }
                catch (IOException e1) 
                {
                    e1.printStackTrace();
                }
            }
        });
        
        p1.add(l1);
        p1.add(b1);
        p2.add(b2);
        p3.add(p1);
        p3.add(p2);
        add(p3);
        setVisible(true);
    }
    @SuppressWarnings("deprecation")
    
    
    public void start()
    {
        try {
            s=new Socket("87.224.227.164", 15000 );
            t=new Thread ("Catch FILEs");
            t.setPriority(6);
        } catch (UnknownHostException e1) {
            b1.disable();
            System.out.println(e1);
        } catch (IOException e1) {
            System.out.println(e1);
        }
    }
    @SuppressWarnings("deprecation")
    public void run()
    {
        while(true)
        {
        try 
        {
            if (s.getInetAddress().isReachable(5)!=true)
                b1.disable();
            else 
                b1.enable();
        } catch (UnknownHostException e1) 
        {
            b1.disable();
            System.out.println(e1);
        } catch (IOException e1) 
        {
            System.out.println(e1);
        }
        
        
        try 
        {
            
            FileOutputStream fos=new FileOutputStream("D:\\Принятые\\1.swf");
            DataInputStream dis=new DataInputStream(s.getInputStream());
            fos.write(dis.read(buffer));
            dis.close();
            fos.close();
        }
        catch (IOException e)
        {
            System.out.println(e);
        }
try {
    Thread.sleep(100);
} catch (InterruptedException e) {
 
    System.out.println(e);
}
        }
    }
    
}
Сервер:
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
public class myServer extends Thread {
 
    static int z=0;
    static Socket User1;
    int u1;
    static Socket User2;
    int u2;
    Socket connectedClient = null;
    File f;
    
    byte[] buffer = new byte[1024] ;
    int bytesRead;
 
    InputStreamReader inFromClient = null;
    BufferedInputStream bi;
    BufferedOutputStream bo;
    DataOutputStream outToClient = null;
    
    public myServer(Socket client) {
        connectedClient = client;
    }           
            
    public void run() {
        
        try {
        
            System.out.println( "Пришёл запрос на подключение от клиента "+connectedClient.getInetAddress()+":"+connectedClient.getPort());
            
            if (User1==null && u1==0)
                    {
                    User1=connectedClient;
                    u1=User1.getPort();
                    System.out.println("Подключился 1-й клиент");
                    }
                else if (User1!=null && User1.getPort()!=connectedClient.getPort() && User2==null) 
                    {
                     User2=connectedClient;
                     System.out.println("Подключился 2-й клиент");
                    }
                else if ((User1!=null && User2!=null) && (User1.getPort()!=connectedClient.getPort() && User2.getPort()!=connectedClient.getPort()))
                    {
                    System.out.println("Превышен лимит подключений");
                    }
                
                if ((User1!=null && User2!=null) && (User1.getPort()==connectedClient.getPort() && User2.getPort()==connectedClient.getPort()))
                    {
                    z++;
                    if (connectedClient==User1)
                    {
                        DataInputStream dis=new DataInputStream(User1.getInputStream());  
                        DataOutputStream dos=new DataOutputStream(User2.getOutputStream());
                        dos.write(dis.read(buffer));
                        dos.flush();
                        dos.close();
                        dis.close();
                    }
                    else
                    {
                        DataInputStream dis=new DataInputStream(User2.getInputStream());  
                        DataOutputStream dos=new DataOutputStream(User1.getOutputStream());
                        dos.write(dis.read(buffer));
                        dos.flush();
                        dos.close();
                        dis.close();
                    }
                    }
             }
            
        catch (Exception e) 
        {
            e.printStackTrace();
        }       
    }
    
    public static void main (String args[]) throws Exception {
        
        ServerSocket Server = new ServerSocket (15000, 2, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт клиентов...");
                                
        while(true) {                                   
                Socket connected = Server.accept();
                (new myServer(connected)).start();
        }      
    }
}
Объясните в чём заключается ошибка и как её исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2011, 14:38
Ответы с готовыми решениями:

Создание простого чата
Ребята пожалуйста задачка: chat Ребята помогите пожалуйста с задачкой: Создание простого чата : 1. Запись каждого участника...

Как создать видео чата с использованием red5 и eclipse?
Добрый день, форумчане! Задумал создать простой видео чат с авторизацией. Нарыскал в ютюбе, гугле, яндексе, на хабре и на киберфоруме,...

Создание Видео Чата!
Есть сервер, нужно сделать чтото типа видео чата на сервере. Т.е. чтобы 2 клиента могли обмниваться видео. Вопрос 1) Реально ли это...

6
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
07.01.2011, 19:42
странный видео чат получается, просто банальный обмен файлами. ты уверен что правильно продумал логику работы?
0
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 6
07.01.2011, 20:04  [ТС]
Я как раз-таки и обратился сюда, чтобы мне подкинули идею... )) (данный мною код не работает)
Вот пришла в голову идея, что второй клиент принимает видео файл и сохраняет его у себя. Сервер опять отправляет хтмл-файл, а клиент принимает хтмл-код и благодаря этому коду открывается браузер, на котором проигрывается допустим флэшка... На словах то всё понятно, а в коде тяжело... А с html я вабще никогда не сталкивался, чтоб уметь корректно составлять код.

Если мой код это банальный обмен файлами, то может подскажите как сделать лучше? )
0
эволюционирую потихоньку
 Аватар для TanT
468 / 466 / 91
Регистрация: 30.06.2009
Сообщений: 1,401
07.01.2011, 20:18
использовать red5 для сервера. это в рамках курсовой разрешается?
0
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 6
08.01.2011, 15:21  [ТС]
Нет, не разрешается. red5 требует установки. Нужно сделать это без каких-либо подключений сторонних программ, пакетов и библиотек. То, что имеет Java при установке.

Добавлено через 17 часов 57 минут
Я переделал код для клиента и для сервера. Сделал просто обмен файлами, хочу чтоб хотя бы файл можно было отослать от одного к другому клиенту для начала )).
При нажатии кнопки изменяется флаг в положение true, который разрешает вход в блок, отвечающий за передачу файла (строка начала блока 76-я). Но при нажатии кнопки - отправки не происходит по непонятным мною причинам...

Клиент:
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
package Kurs;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
 
import javax.swing.*;
 
public class ClientChat extends JApplet implements Runnable
{
    
    private static final long serialVersionUID = 2L;
    File ReadFile= new File("C:\\Workispaci\\HelloWorld\\FILES\\1.swf");
    FileInputStream fis;
    static Socket s=null;
    static boolean flag=false;
    Thread t=null;
    int bytesRead;
    byte[] buffer = new byte[1024] ;
    
    Container c = new Container ();
    JLabel l1 =new JLabel ("Отправить файл");
    static JButton b1=new JButton("Отправить");
    JButton b2=new JButton("Принять");
    JPanel p1= new JPanel();
    JPanel p2= new JPanel();
    JPanel p3= new JPanel();
    
    public void init()
    {
        setSize(400,200);
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) 
            {
                flag=true;
            }
        });
        p1.add(l1);
        p1.add(b1);
        //p2.add(b2);
        p3.add(p1);
        p3.add(p2);
        add(p3);
        setVisible(true);
        
    }
    
    public void start()
    {
        t=new Thread (this);
        t.setPriority(6);
        t.start();
    }
    
    @SuppressWarnings({ "deprecation", "null" })
    public void run()
    {
        //Ищем соединение
        for (;;)
        {
            try {
                Thread.sleep(1);
                s=new Socket("87.224.227.164",1000);
                b1.enable();
                break;
        } catch (Exception e1) {
                b1.disable();
        }
        }
        System.out.println(s);
 
        
        for(;;)
        {
            if (flag==true)
            {
                System.out.println("ЕСЛИ КНОПКУ НАЖАЛ, ТО ЭТО выведится в консось!");
                try 
        {
            fis=new FileInputStream(ReadFile);
            DataOutputStream dos=new DataOutputStream(s.getOutputStream());
            
            while ((bytesRead = fis.read(buffer)) != -1 ) {
            dos.write(buffer, 0, bytesRead);
            }
            fis.close();
            dos.flush();
            dos.close();
            Thread.sleep(1000);
            buffer=null;
            flag=false;
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
            }
        
            DataInputStream dis = null;
            try {
                dis = new DataInputStream(s.getInputStream());
            } catch (IOException e1) {
                System.out.println(e1);
            }
        if (dis!=null)
            {
                try
        {
            FileOutputStream fos=new FileOutputStream("D:\\Принятые\\1.swf");
            fos.write(dis.read(buffer));
            dis.close();
            fos.close();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }
            } else
            try {
                dis.close();
            } catch (IOException e) {
                System.out.println("Ошибка даже при закрытии пустого потока");
            }
        }
    }
}
Сервер:
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
package Kurs;
 
import java.io.*;
import java.net.*;
 
public class myServer{
 
    @SuppressWarnings("unused")
    public static void main (String args[]) throws Exception {
        
        ServerSocket Server1 = new ServerSocket (1000, 2, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт 1-го клиента...");
        Socket connected1 = Server1.accept();
        ServerSocket Server2 = new ServerSocket (2000, 2, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт 2-го клиента...");
        Socket connected2 = Server2.accept();
        for (;;) 
        {                                   
            byte[] buffer = new byte[1024] ;
            DataInputStream dis2=new DataInputStream(connected2.getInputStream());  
            DataInputStream dis1=new DataInputStream(connected1.getInputStream());
            if (dis1==null && dis2!=null)
            {
                DataInputStream dis=new DataInputStream(connected2.getInputStream());  
                DataOutputStream dos=new DataOutputStream(connected1.getOutputStream());
                dos.write(dis.read(buffer));
                dos.flush();
                dos.close();
                dis.close();
            }
            else if (dis2==null && dis1!=null)
            {
                DataInputStream dis=new DataInputStream(connected1.getInputStream());  
                DataOutputStream dos=new DataOutputStream(connected2.getOutputStream());
                dos.write(dis.read(buffer));
                dos.flush();
                dos.close();
                dis.close();
            }
            else
                System.out.println("Оба канала, выходит, заняты... или наоборот нет поступающей информации...");
        }      
    }
}
0
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 6
15.01.2011, 00:04  [ТС]
Вот выкладываю обновлённый код. Теперь здесь можно гипотетически обмениваться файлами. Но этот обмен не происходит... Или он происходит, но это просто я неправильно применил методы read() write() и им подобные.Сначала включаем сервер:
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
import java.io.*;
import java.net.*;
 
public class myServer{
 
    synchronized public static void main (String args[]) throws Exception {
         
        int bytesRead;
        byte[] buffer1 = new byte[1024];
        byte[] buffer2 = new byte[1024];
        int b1;
        int b2;
try{
        ServerSocket Server1 = new ServerSocket (2001, 10, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт 1-го клиента...");
        Socket connected1 = Server1.accept();
        System.out.println ("1-й клиент подключился");
        DataOutputStream to1=new DataOutputStream(connected1.getOutputStream());
        to1.write(2);
        to1.flush();
        to1.close();
        connected1.close();
        connected1=Server1.accept();
        DataInputStream from1=new DataInputStream(connected1.getInputStream());
        b1=from1.read();
        if (b1!=2)
        {
            from1.read(buffer1);
            b1=0;
        }
        connected1.close();
        //Server1.close();
        
        ServerSocket Server2 = new ServerSocket (2002, 10, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт 2-го клиента...");
        Socket connected2 = Server2.accept();       
        System.out.println ("2-й клиент подключился");
        
        DataOutputStream to2=new DataOutputStream(connected2.getOutputStream());
        to2.write(2);
        to2.flush();
        to2.close();
        connected2.close();
        connected2=Server2.accept();
        DataInputStream from2=new DataInputStream(connected2.getInputStream());
        b2=from2.read();
        if (b2!=2)
        {
            from2.read(buffer2);
            b2=0;
        }
        connected2.close();
        //Server2.close();
        
        System.out.println ("Сервер слушает порты...");
        
        while(true)
        {
            //ServerSocket Server11 = new ServerSocket (2001, 10, InetAddress.getByName("87.224.227.164"));         
            connected1 = Server1.accept();
            DataOutputStream to11=new DataOutputStream(connected1.getOutputStream());
            if (b2==0)
                {
                                                
                    to11.write(buffer2);
                
                to11.flush();
                to11.close();
                System.out.println(buffer2);
                /*DataOutputStream to11html=new DataOutputStream(connected1.getOutputStream());
                to11html.writeUTF("file:///D:\\Принятые\\1.swf");
                to11html.flush();
                to11html.close();*/
                }
            else
                to11.write(2);
            to11.flush();
            to11.close();
            connected1.close();
 
            connected1=Server1.accept();
            DataInputStream from11=new DataInputStream(connected1.getInputStream());
            b1=from11.read();
            while ((bytesRead=from11.read(buffer1))!=-1)
            {
                from11.read(buffer1,0,bytesRead);
                b1=0;
            }
            connected1.close();
            
            
            
            //ServerSocket Server22 = new ServerSocket (2002, 10, InetAddress.getByName("87.224.227.164"));         
            connected2 = Server2.accept();
            DataOutputStream to22=new DataOutputStream(connected2.getOutputStream());
            if (b1==0)
                {
                
                to22.write(buffer1);
                to22.flush();
                to22.close();
                /*DataOutputStream to22html=new DataOutputStream(connected2.getOutputStream());
                to22.writeUTF("file:///C:\\Принятые\\1.swf");
                to22html.flush();
                to22html.close();*/
                System.out.println(buffer1);
                }
            else
                to22.write(2);
            to22.flush();
            to22.close();
            connected2.close();
            
            connected2=Server2.accept();
            DataInputStream from22=new DataInputStream(connected2.getInputStream());
            b2=from22.read();
            while ((bytesRead=from22.read(buffer2))!=-1)
            {
                from22.read(buffer2,0,bytesRead);
                b2=0;
            }
            connected2.close();
        }    
}
catch (Exception e)
{
                   e.printStackTrace();
                   //System.exit(0);
}
    }
}

Потом включаем клиент, подсоединяющийся к порту 2001, а потом к порту 2002. Во втором случае нужно в самом коде поменять в трёх строках: 64, 88, 108 2001->2002 )

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
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
 
import javax.swing.*;
 
public class ClientChat extends JApplet implements Runnable
{
    
    private static final long serialVersionUID = 2L;
    
    
    static Socket s=null;
    static public boolean flag=false;
    Thread t=null;
    int bytesRead;
    byte[] buffer = new byte[1024] ;
    
    Container c = new Container ();
    JLabel l1 =new JLabel ("Отправить файл");
    static JButton b1=new JButton("Отправить");
    JButton b2=new JButton("Принять");
    JPanel p1= new JPanel();
    JPanel p2= new JPanel();
    JPanel p3= new JPanel();
    
 
    public void init()
    {
        setSize(400,200);
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) 
            {
                flag=true;
            }
        });
        p1.add(l1);
        p1.add(b1);
        //p2.add(b2);
        p3.add(p1);
        p3.add(p2);
        add(p3);
        setVisible(true);
        
    }
    public void start()
    {
        t=new Thread (this);
        t.setPriority(6);
        t.start();
    }
    
    @SuppressWarnings({ "deprecation" })
    public void run()
    {
        int bu;//=2;
        
    while(true)
        {                                           
        try {                                       
            s=new Socket("87.224.227.164",2001);
            
                b1.enable();                        
                System.out.println("Сокет открылся");                                      
                
                DataInputStream dis = new DataInputStream(s.getInputStream());              
                bu=dis.read();
                if (bu!=2)
                    {
                            FileOutputStream fos=new FileOutputStream("D:\\Принятые\\1.swf");
                            while ((bytesRead=dis.read(buffer))!=-1)
                            {
                                fos.write(buffer);  
                            }
                            
                            System.out.println(buffer);
                            fos.close();
                            
                    }
                dis.close();
                System.out.println(bu);
            
            if (flag==true) 
            {               
                s=new Socket("87.224.227.164",2001);
                System.out.println("ЕСЛИ КНОПКУ НАЖАЛ, ТО ЭТО выведится в консось!");
            File ReadFile= new File("C:\\Workispaci\\HelloWorld\\FILES\\1.swf");            
            
            
            FileInputStream fis=new FileInputStream(ReadFile);                          
            DataOutputStream dos=new DataOutputStream(s.getOutputStream());             
                                                                                        
            while ((bytesRead = fis.read(buffer)) != -1 ) {                             
            dos.write(buffer,0,bytesRead);                                              
            }                                                                           
            dos.flush();                                                                
            dos.close();                                                                
            fis.close();                                                                
            
            
            flag=false;                                                                 
            }
            else
            {                                                                               
                s=new Socket("87.224.227.164",2001);
                DataOutputStream dos=new DataOutputStream(s.getOutputStream());         
                System.out.println("Что-то происходит...");
                dos.write(2);                                                           
                dos.flush();                                                            
                dos.close();                                                            
                                                                                        
            }
                                            
            s.close();                      
            Thread.sleep(1);
        }
        catch (Exception e) 
        {
                                        
            flag=false;
            e.printStackTrace();
            b1.disable();
            try 
            {
                Thread.sleep(1000);
                s.close();
            }
            catch (Exception e1) 
            {
            e1.printStackTrace();
            }
        }
        System.out.println("Идёт...");
        }                                       
    }
}
Прошу прощения за такой код, начал работать с сокетами, потому что не знаю как работать с thread-овскими потоками.
Проблемы:
1) Не передаётся файл должным образом.
2) При запуске апплета через какой-либо браузер не прорисовывается сам апплет, а если и прорисовывается, то не конектится к серверу по непонятным мной причинам. (Хотя applet viewer спокойно позволяет подсоединяться к серверу)
3) В силу двух предыдущих проблем вытекает и эта. А именно, открыть флэшку в браузере. Т.е. во-перых надо передать её корректно, а во-вторых запустить апплет в браузере.

Помогите, чем могите )
0
0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 6
28.01.2011, 23:55  [ТС]
Мне удалось сделать просто обмен файлами между клиентами. Но можно ли сделать так, чтобы при отправке swf-файла он проигрывался в браузере? Например сервер когда пересылает файл от одного клиента другому, то он, отправив получателю, вдогонку отправляет и строку с местом расположения файла (типа: "file:///D:/Принятые/1.swf"), чтобы браузер воспринял её и открыл переданный файл. (Этот вариант у меня не получается осуществить. Файл передаётся, но в браузере не открывается.)
Может быть существуют другие варианты...
Помогите пожалуйста разобраться с этой проблемой... Может кто сталкивался с подобной и знает решение... )

СЕРВЕР:
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
import java.io.*;
import java.net.*;
 
public class myServer{
 
    synchronized public static void main (String args[]) throws Exception {
         
        byte[] buffer1 = new byte[1024];
        byte[] buffer2 = new byte[1024];
        byte b1;
        byte b2;
try{
        ServerSocket Server1 = new ServerSocket (2001, 10, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт 1-го клиента...");
        Socket connected1 = Server1.accept();
        System.out.println ("1-й клиент подключился");
        DataOutputStream to1=new DataOutputStream(connected1.getOutputStream());
        to1.write(2);
        to1.flush();
        to1.close();
        connected1.close();
        connected1=Server1.accept();
        DataInputStream from1=new DataInputStream(connected1.getInputStream());
        b1=from1.readByte();
        if (b1!=2)
        {
            from1.read(buffer1);
            b1=0;
        }
        connected1.close();
        //Server1.close();
        
        ServerSocket Server2 = new ServerSocket (2002, 10, InetAddress.getByName("87.224.227.164"));         
        System.out.println ("TCP-сервер ждёт 2-го клиента...");
        Socket connected2 = Server2.accept();       
        System.out.println ("2-й клиент подключился");
        
        DataOutputStream to2=new DataOutputStream(connected2.getOutputStream());
        to2.write(2);
        to2.flush();
        to2.close();
        connected2.close();
        connected2=Server2.accept();
        DataInputStream from2=new DataInputStream(connected2.getInputStream());
        b2=from2.readByte();
        if (b2!=2)
        {
            from2.read(buffer2);
            b2=0;
        }
        connected2.close();
        //Server2.close();
        
        System.out.println ("Сервер слушает порты...");
        
        while(true)
        {
            //ServerSocket Server11 = new ServerSocket (2001, 10, InetAddress.getByName("87.224.227.164"));         
            connected1 = Server1.accept();
            DataOutputStream to11=new DataOutputStream(connected1.getOutputStream());
            
            if (b2==0)
                {
                    FileInputStream fos=new FileInputStream("D:\\Перенятые\\1.swf");
                while (true){ 
                    int readedBytesCount = fos.read(buffer2); 
                    if (readedBytesCount == -1) { 
                        break; 
                    } 
                    if (readedBytesCount > 0) { 
                        to11.write(buffer2, 0, readedBytesCount); 
                    }
                }
                fos.close();
                to11.flush();
                to11.close();
                System.out.println(buffer2);
                connected1.close();
                /*connected1 = Server1.accept();
                DataOutputStream to11html=new DataOutputStream(connected1.getOutputStream());
                to11html.writeUTF("file:///D:/Принятые/1.swf");
                to11html.flush();
                to11html.close();*/
                }
            else
                to11.write(2);
            to11.flush();
            to11.close();
            connected1.close();
 
            
            
            connected1=Server1.accept();
            DataInputStream from11=new DataInputStream(connected1.getInputStream());
            b1=from11.readByte();
            if (b1!=2)
            {
                FileOutputStream fos=new FileOutputStream("D:\\Перенятые\\1.swf");
                buffer1[0]=b1;
            from11.read(buffer1,1,buffer1.length-1);
            fos.write(buffer1);
            while (true){ 
                int readedBytesCount = from11.read(buffer1); 
                if (readedBytesCount == -1) { 
                    break;
                    
                } 
                if (readedBytesCount > 0) { 
                    fos.write(buffer1, 0, readedBytesCount);
                }
            }
            fos.flush();
            fos.close();
            from11.close();
            b1=0;
            }
            connected1.close();
            
            connected2 = Server2.accept();
            DataOutputStream to22=new DataOutputStream(connected2.getOutputStream());
            if (b1==0)
                {
                FileInputStream fos=new FileInputStream("D:\\Перенятые\\1.swf");
                while (true){ 
                    int readedBytesCount = fos.read(buffer1); 
                    if (readedBytesCount == -1) { 
                        break; 
                    } 
                    if (readedBytesCount > 0) { 
                        to22.write(buffer1, 0, readedBytesCount); 
                    }
                }
                to22.write(buffer1);
                to22.flush();
                to22.close();
                /*DataOutputStream to22html=new DataOutputStream(connected2.getOutputStream());
                to22.writeUTF("file:///C:\\Принятые\\1.swf");
                to22html.flush();
                to22html.close();*/
                System.out.println(buffer1);
                }
            else
                to22.write(2);
            to22.flush();
            to22.close();
            connected2.close();
            
            connected2=Server2.accept();
            DataInputStream from22=new DataInputStream(connected2.getInputStream());
            b2=from22.readByte();
            
            if (b2!=2)
            {
                FileOutputStream fos=new FileOutputStream("D:\\Перенятые\\1.swf");
                buffer2[0]=b2;
            from22.read(buffer2,1,buffer2.length-1);
            fos.write(buffer2);
            while (true){ 
                int readedBytesCount = from22.read(buffer2); 
                if (readedBytesCount == -1) { 
                    break;
                    
                } 
                if (readedBytesCount > 0) { 
                    fos.write(buffer2, 0, readedBytesCount);
                }
            }
            fos.flush();
            fos.close();
            from22.close();
            b2=0;
            }
            connected2.close();
        }    
}
catch (Exception e)
{
                   e.printStackTrace();
                   //System.exit(0);
}
    }
}

КЛИЕНТ:
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
//import java.security.AllPermission;
//import java.security.Permission;
 
import javax.swing.*;
 
public class ClientChat extends JApplet implements Runnable
{
    
    private static final long serialVersionUID = 2L;
    
     
//  Permission p=new AllPermission ("", null);
    static Socket s=null;
    static public boolean flag=false;
    Thread t=null;
    int bytesRead;
    byte[] buffer = new byte[1024] ;
    
    Container c = new Container ();
    JLabel l1 =new JLabel ("Отправить видео");
    static JButton b1=new JButton("Отправить");
    JButton b2=new JButton("Принять");
    JPanel p1= new JPanel();
    JPanel p2= new JPanel();
    JPanel p3= new JPanel();
    
 
    public void init()
    {
        setSize(400,200);
        b1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e) 
            {
                flag=true;
            }
        });
        p1.add(l1);
        p1.add(b1);
        //p2.add(b2);
        p3.add(p1);
        p3.add(p2);
        add(p3);
        setVisible(true);
        
    }
    public void start()
    {
        t=new Thread (this);
        t.setPriority(6);
        t.start();
    }
    
    @SuppressWarnings({ "deprecation" })
    public void run()
    {
        int bu;//=2;
        
    while(true)
        {                                           
        try {                                       
            s=new Socket("87.224.227.164",2001);
            
                b1.enable();                        
                System.out.println("Сокет открылся");                                      
                
                DataInputStream dis = new DataInputStream(s.getInputStream());              
                bu=dis.read();
                if (bu!=2)
                    {
                    FileOutputStream fos=new FileOutputStream("D:\\Принятые\\1.swf");       
                    
                    buffer[0]=(byte) bu;
                dis.read(buffer,1,buffer.length-1);
                fos.write(buffer);
                while (true){ 
                    int readedBytesCount = dis.read(buffer); 
                    if (readedBytesCount == -1) { 
                        break;
                    } 
                    if (readedBytesCount > 0) { 
                        fos.write(buffer, 0, readedBytesCount);
                    }
                }
                            System.out.println(buffer);
                            fos.close();
                            s=new Socket("87.224.227.164",2001);
                            //DataInputStream dishtml = new DataInputStream(s.getInputStream());
                            //dishtml.close();
                    }
                
                dis.close();
                System.out.println(bu);
            
            if (flag==true) 
            {               
                s=new Socket("87.224.227.164",2001);
                System.out.println("ЕСЛИ КНОПКУ НАЖАЛ, ТО ЭТО выведится в консось!");
            File ReadFile= new File("C:\\Workispaci\\HelloWorld\\FILES\\1.swf");            
            
            
            FileInputStream fis=new FileInputStream(ReadFile);                          
            DataOutputStream dos=new DataOutputStream(s.getOutputStream());             
            
            while (true){ 
                int readedBytesCount = fis.read(buffer); 
                if (readedBytesCount == -1) { 
                    break; 
                } 
                if (readedBytesCount > 0) { 
                    dos.write(buffer, 0, readedBytesCount); 
                }
            }
            
            dos.flush();                                                                
            dos.close();                                                                
            fis.close();                                                                
            
            
            flag=false;                                                                 
            }
            else
            {                                                                               
                s=new Socket("87.224.227.164",2001);
                DataOutputStream dos=new DataOutputStream(s.getOutputStream());         
                System.out.println("Что-то происходит...");
                dos.write(2);                                                           
                dos.flush();                                                            
                dos.close();                                                            
                                                                                        
            }
                                            
            s.close();                      
            Thread.sleep(100);
        }
        catch (Exception e) 
        {
                                        
            flag=false;
            e.printStackTrace();
            b1.disable();
            try 
            {
                Thread.sleep(1000);
                s.close();
            }
            catch (Exception e1) 
            {
            e1.printStackTrace();
            }
        }
        System.out.println("Идёт...");
        }                                       
    }
 
}
P.S.: При запуске через браузер java.security не будет давать делать сокет-соединение. Для этого я в файлике java.policy в методе grant оставил только одну строку:
permission java.security.AllPermission;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.01.2011, 23:55
Помогаю со студенческими работами здесь

Создание видео чата со случайным собеседником
Всем здравствуйте. Всех с новым годом! Итак, вопрос хочу сделать видео чат типо Chatroulette, пример накидал в Paint : Для тех...

Создание чата с отображением видео захваченного с видеокамеры собеседника
Здравствуйте. Я решил создать что-то подобие скайпа для изучения, а как это работает. В целом чат не составило труда реализовать по...

Идеи по созданию видео чата на сервере.
Есть сервер, нужно сделать чтото типа видео чата на сервере. Т.е. чтобы 2 клиента могли обмниваться видео. Вопрос 1) Реально ли это...

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

Создание чата
У меня есть чат по локальной сети, там могут переписываться все пользователи. Но хотелось бы сделать дополнительную функцию, чтобы я мог...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru