Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для pazlle
27 / 17 / 8
Регистрация: 02.11.2009
Сообщений: 176

Как потоки передать в метод run()

19.07.2012, 00:49. Показов 2839. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как работать с потоками не могу разобраться. как взятые потоки передать по 2 в метод run()? Что бы 1 нить работала с инпутом клиента и оутпуом сервера, а другая с инпутом сервера и отупутом клиента
Класс сервер
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
import java.io.*;
import java.net.*;
 
public class Server {
 
    public static void main(String args[])
    {
        String  str,
                rev;
        int r;
        //boolean exit = false;
        System.out.println("Socket Server Application");
        System.out.println("---- Start ----");
        try
        {
            ServerSocket ss = new ServerSocket(10000);
            Socket s = ss.accept();
            DataInputStream dataIn = new DataInputStream(new BufferedInputStream(s.getInputStream()));
            DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
            //обработка команд от клиента
            while(true)
            {
                str = dataIn.readUTF();
                System.out.print(str);
                if(str.equals("exit")) break;
                r = str.length()-1;
                rev="";
                for (int i = 0; i < str.length(); i++)
                {
                    rev+=str.toCharArray()[r-i];
                }
              //  System.out.println(" > "+rev);
                dataOut.writeUTF(rev);
                dataOut.flush();
 
            }
            dataIn.close();
            dataOut.close();
            s.close();
            ss.close();
        }
        catch(IOException ioe)
        {
            System.out.println(ioe.toString());
        }
        System.out.println("---- Finish ----");
    }
 
}
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
import java.io.*;
import java.net.*;
 
public class Client {
    public static void main(String args[])
    {
        String  str,
                res;
        boolean exit = false;
        System.out.println("Socket Client Application");
        System.out.println("---- Start ----");
        try
        {
            BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));
            Socket s = new Socket("localhost",1111);
            DataInputStream dataIn = new DataInputStream(new BufferedInputStream(s.getInputStream()));
            DataOutputStream dataOut = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
            // ввод команд серверу
            while(!exit)
            {
                System.out.println("Enter a string:");
                str = stdin.readLine();
                System.out.print("["+str+ " <> ");
                if(!str.equals("exit"))
                {
                    dataOut.writeUTF(str);
                    dataOut.flush();
                }
                else
                {
                    dataOut.writeUTF("exit");
                    dataOut.flush();
                    exit = true;
                }
                res = dataIn.readUTF();
                System.out.println(res+"]");
            }
            dataIn.close();
            dataOut.close();
            s.close();
        }
        catch(IOException ioe)
        {
            System.out.println(ioe.toString());
        }
    }
 
}
класс клиента
Класс снифера
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
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Snifer  {
        public InputStream inputStream;
        public OutputStream outputStream;
         
        public Snifer(InputStream in, OutputStream out) {
            inputStream = in;
            outputStream =  out;
            
        }
            
        
 
    
    public static void main(String[] args) throws InterruptedException,IOException {
        /*Waiting client*/
        /*Connect to server*/
        try
        {
            System.out.print("waiting client");
            ServerSocket serverSocket = new ServerSocket(1111);
            Socket socket = serverSocket.accept();
            
            Socket socketServer = new Socket("localhost", 10000);
            
            Snifer s1 = new Snifer(socket.getInputStream(),socketServer.getOutputStream());
            Snifer s2 = new Snifer(socketServer.getInputStream(), socket.getOutputStream());    
            Thread client = new Thread(new Procesing());
            client.start();
            Thread server = new Thread(new Procesing());
            server.start();
            
            
            
        }
        catch(IOException e)
        {
            System.out.print("Could't listen port");
        }
        
 
        
        
        
    }
 
}
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
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Procesing implements Runnable {
    
        public void run()
        {   
            if(t != null)
            {
                t.start();
            }
            
            int cnt = 0;
            byte[] buffer = new byte[4096];
            while(true)
            {
                
                try {
                    
                    cnt = s.inputStream.read(buffer);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                    for(int i =0; i<cnt;i++)
                    {
                        System.out.print(buffer[i]+" ");
                    }
                try {
                    s.outputStream.write(buffer, 0, cnt);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                }
                
            }
        
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2012, 00:49
Ответы с готовыми решениями:

Как в классе Thread реализован вызов run(), если метод run() определён в АВТОРСКОМ классе?
И, следовательно, в классе Thread ничего не известно о вызове run? То есть, ребята, мне пришла в голову мысль. Коль скоро самый...

Потоки. Как функции передать 2 указателя ?
Вот столкнулся с проблемой. На примере задач с потоками в функции было указано только один входящий параметр, а у меня их 2 - void...

Потоки с таймером: Требуется выполнить процедуру Run для всех значений в counts
Приветствую! Допустим, есть некоторая процедура (на примере ниже - Run), которая выполняется определенное время, в зависимости от...

2
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
19.07.2012, 01:01
Идея такая:
вешаем в главной программе сервера сервер сокет, на прослушку в бесконечном цикле, как только он акцептнётся, создаём новый поток который будет обслуживать клиента и передаём в него этот сокет(естественно можно создать и 2 потока и в оба сокет).
0
 Аватар для pazlle
27 / 17 / 8
Регистрация: 02.11.2009
Сообщений: 176
19.07.2012, 02:10  [ТС]
mutagen, Сервер и клиент менять не нужно. Нужно что обработка стримов клиента и сервера была в 2х нитях

Добавлено через 38 минут
или в классе снффер или процессинг
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2012, 02:10
Помогаю со студенческими работами здесь

Как передать в метод класса Menu указатель на метод дочернего класса?
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Какие аргументы передать в Application.Run для формы
всем привет!) помогите в решении данной проблемы. выдает ошибку на вот эту строчку кода Programm.cs Application.Run(new Form1());

Как передать объект в метод?
Есть два класса KvadYr и KvadYr2(Оба имеют методы с одинаковыми именами и параметрами, отличаются только формулы) в зависимости от того Б...

Как передать ip адрес в метод
У InetAddress есть метод getByAddress который принимает ip адрес в виде массива byte в ip адресе числа от 0 до 256 но тип byte...

Как передать HashMap в метод?
Есть некоторая структура данных LinkedHashMap LinkedHashMap&lt;Long, List&gt; hashMap = new LinkedHashMap&lt;&gt;(); которую я заполняю данными....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru