День в истории - 18 ноября

1900 год. "Барселона" выбрала свое первое поле, которое находилось рядом с гостиницей "Казанова". Первый матч каталонские футболисты сыграли против команды Римской Испании - 0:0.
Со дня этого события прошло 124 года
1 из 2

 

Вернуться   Форум > Разное > Кулес > Hi-tech
Имя
Пароль

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2012 в 13:00 Цитата выделенного #111
К@t@LoNeЦ
Ells ho tenen tot...
pero aixo no es suficient
Аватар для К@t@LoNeЦ
 
Регистрация: 12.11.2009
Сообщения: 1,527
Сказал(а) спасибо: 2,161
Поблагодарили: 2,099 раз(а) в 689 сообщениях
Деньги: 2766$
 
По умолчанию

Кто-нибудь знаком с такими языками программирования как: LD, FBD, SFC, ST, IL, CFC ?
Просто все они являются языками программирования ПЛК, и первые три из них - графические.

Хотелось бы узнать, насколько сильно отличаются принципы программирования графических языков ПЛК от т.н. "неграфических", в частнотсти, и различие этих шести языков для ПЛК от всеми известных языков программирования (Объектно-ориентированных, скриптовых и т.д.) таких как: Delphi, C++, Assembler и т.д.
__________________
Offline   Ответить с цитированием
Старый 15.05.2014 в 19:37 Цитата выделенного #112
К@t@LoNeЦ
Ells ho tenen tot...
pero aixo no es suficient
Аватар для К@t@LoNeЦ
 
Регистрация: 12.11.2009
Сообщения: 1,527
Сказал(а) спасибо: 2,161
Поблагодарили: 2,099 раз(а) в 689 сообщениях
Деньги: 2766$
 
По умолчанию

Вопрос скорее к знающим Java, но и от любой помощи не откажусь.
Столкнулся с задачей написать клиент-сервер на любом языке, решающий простое задание.
Т.к. сам сейчас начал изучать java, решил на нем и писать.
Задание - сортировка шести чисел по частям.
Имеется строка с шестью числами через пробел на сервере с ограничением на 3 клиентов.
Клиент разбивает этот "массив" (никакой это не массив, просто слово другого не смог подобрать) на 3 куска и отправляет клиентам, чтобы они каждый свой кусок отсортировали и вернули серверу, чтобы что-то еще кое-что дальше сделать, но до этого еще дойти надо....
Так вот, по не знанию матчасти столкнулся с вопросами:
1. у меня при описании сервера есть переменная i, с помощью которой я и подсчитываю клиенты и обрубаю подключения новых, когда i>3. Хотя в мануале написано про какой-то backlog.
.
.
.
public ServerSocket(int port,
int backlog)
throws IOException
Creates a server socket and binds it to the specified local port number, with the specified backlog. A port number of 0 creates a socket on any free port.
.
.
.


Как я понял, он и должен этим заниматься, и я поставил тройку после номера порта, но это ничего не дало. Скорее всего это я что-то делаю не так.
2. Не пойму как оперировать этими клиентами. Т.е. как сделать так, чтобы он первые 2 числа отправлял 1-му клиенту, вторые - 2-му, третьи - 3-му и чтобы я мог вывести на экран номер подключенного клиента. Знаю только как отправить что-то определенное и известное, но не в зависимости от номера клиента.
Server:
PHP код:
import java.io.*;
import java.net.*;
 
class 
Server extends Thread
{
    
Socket s;
 
 
    public static 
void main(String args[])
    {
        try
        {
            
int i 0// счётчик подключений
 
            // привинтить сокет на локалхост, порт 6665
            
ServerSocket server = new ServerSocket(66653);
 
            
System.out.println("server is started");
 
            
// слушаем порт
            
while(i<4)
            {
                
// ждём нового подключения, после чего запускаем обработку клиента
                // в новый вычислительный поток и увеличиваем счётчик на единичку
                
new Server(server.accept());
                
i++;
            }
        }
        catch(
Exception e)
        {
System.out.println("init error: "+e);
        } 
// вывод исключений
    
    
}
 
    public 
Server(Socket s)
    {
        
// копируем данные
        
this.s;
 
        
// и запускаем новый вычислительный поток (см. ф-ю run())
        
setDaemon(true);
        
setPriority(NORM_PRIORITY);
        
start();
    }
 
    public 
void run()
    {
        try
        {          
            
InputStream sin s.getInputStream();
            
OutputStream sout s.getOutputStream();
            
            
DataInputStream in = new DataInputStream(sin);
            
DataOutputStream out = new DataOutputStream(sout);
            
            
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
           
            
String line "12 2 12 4 5 6";
               
                
System.out.println("\nSending to "  " client!");
 
                
String str[] = line.split("[ ]");
                                
                
out.writeUTF(String.valueOf(Integer.valueOf(str[0])+" "Integer.valueOf(str[1])));
                
                
System.out.println(String.valueOf(Integer.valueOf(str[0])+" "Integer.valueOf(str[1])));
                
in.readUTF();
                
System.out.println("Client got a pocket!");
  
        }catch(
Exception e)
        {
System.out.println("init error: "+e);} // вывод исключений
    
}



Client:
PHP код:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
 
public class 
Client extends Thread {
 
    public static 
void main(String[] argsthrows Exception {
        try {
            
Socket socket = new Socket("localhost"6665);
            
            
InputStream sin socket.getInputStream();
            
OutputStream sout socket.getOutputStream();  
            
            
DataInputStream in = new DataInputStream(sin);
            
DataOutputStream out = new DataOutputStream(sout);
            
String line,null;
            
            
line in.readUTF();
            
String str[] = line.split("[ ]");
            
            
System.out.println("I got a pocket!");
            if (
Integer.valueOf(str[0]) > Integer.valueOf(str[1])) {
                
                
str[0];
                
str[0] = str[1];
                
str[1] = c;
                
            }
                        
             
out.writeUTF("I got it!");           
             
System.out.println("line: "str[0] +" " str[1]);
                                     
        } catch(
Exception e)
        {
System.out.println("init error: "+e);}
    }  


В гугле в основном простейшие эхо-серверы на одного клиента.

Последний раз редактировалось К@t@LoNeЦ, 16.05.2014 в 02:08.
Offline   Ответить с цитированием
Старый 16.05.2014 в 02:57 Цитата выделенного #113
Catala
Ленивый webmaster
Аватар для Catala
 
Регистрация: 28.04.2006
Сообщения: 10,312
Сказал(а) спасибо: 317
Поблагодарили: 15,021 раз(а) в 5,206 сообщениях
Деньги: 878076$
 
По умолчанию

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

Backlog определяет длину очереди. Если сервер обрабатывает клиента быстрее, чем интервалы между клиентами (а это насколько я понял твой случай) в этом параметре нет смысла.

Пример. Допустим backlog равен 5. На обработку клиента нужна минута. В первую секунду каждой минуты стучатся 3 клиента.
1 минута - все 3 клиента зашли в очередь и первый поступил на обработку.
2 минута - первый клиент отключился, в очереди остались двое, как раз хватает места для 3 новых клиентов.
3 минута - второй клиент отключился, в очереди осталось 4. Место осталось только для одного нового (backlog == 5), поэтому два остальных получат connection refused.
__________________
Не ошибается тот - кто не думает.(C)RIVALDO
Offline   Ответить с цитированием
Сказал(а) спасибо:
К@t@LoNeЦ (22.05.2014)
Старый 22.05.2014 в 20:16 Цитата выделенного #114
К@t@LoNeЦ
Ells ho tenen tot...
pero aixo no es suficient
Аватар для К@t@LoNeЦ
 
Регистрация: 12.11.2009
Сообщения: 1,527
Сказал(а) спасибо: 2,161
Поблагодарили: 2,099 раз(а) в 689 сообщениях
Деньги: 2766$
 
По умолчанию

Короче поковырялся сегодня - вроде как удалось передать каждому клиенту то, что нужно, но местами набыдлокодил - if в while - масло масленное. Ладно, разбираться потом буду. Все же сдавать уже в следующую пятницу, а еще сортировку по частям на всем этом реализовывать, да и препод по сетевым технологиям в языках ничего не смыслит. Главное, что работает на данном этапе. Плотнее языком летом займусь.

Сервер:
PHP код:
import java.io.*;
import java.net.*;

class 
Server extends Thread
{
    
Socket socket;
    
    
//num - номер клиента, a - номер массивов для метода run()
    
int num=1a=0
    
    
//исходные числа, которые сортируем
    
String line "6 5 4 3 2 1"
    
    
//создает массив из чисел, разделенных пробелом
    
String str[] = line.split("[ ]"); 
    
    public static 
void main(String[] args)
    {
        
        try
        {
            
//i - счетчик подключений, a - номер массивов для метода run()
            
int i 1,0

            
// создаем сервер на локалхост, порт 6665
            
ServerSocket server = new ServerSocket(6665);
            

            
System.out.println("server is started");
            
System.out.println("\n---------------------------------------");

            
// слушаем порт
            
while(i<=4)
            {
                
// WARNING!
                // Следующие 15 строчек - быдлокод!(не исключено,что есть еще)
                
if (i>3){
                    
server.close();
                }
                else{
                
// ждём нового подключения, после чего запускаем обработку клиента
                // в новый вычислительный поток и увеличиваем счётчик на единичку
/*!*/           
new Server(iserver.accept(), a); //сам не понял, почему надо писать так, но работает

                //Инфа о подключенных клиентах
                
System.out.println("\nClient " " connected!");
                
                
i++; //увеличиваем счётчик 
                
a=a+2//берем следующие 2 числа
                
}
            }
        }
        catch(
Exception e)
        {
System.out.println("init error: "+e); // вывод исключений
        

    
    }

    public 
Server(int numSocket socketint a)
    {
        
// копируем данные
        
this.socket socket;
        
this.a;
        
this.num num;
        
        
// и запускаем новый вычислительный поток (см. ф-ю run())
        
setDaemon(true);
        
setPriority(NORM_PRIORITY);
        
start();
    }

    public 
void run()
    {
        
        try
        {          
            
// из сокета клиента берём поток входящих данных
            
InputStream sin socket.getInputStream();
            
// и оттуда же - поток данных от сервера к клиенту
            
OutputStream sout socket.getOutputStream();
            
            
// Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения
            
DataInputStream in = new DataInputStream(sin);
            
DataOutputStream out = new DataOutputStream(sout);
                   
                
System.out.println("\nSending to " num " client!");
               
                
// отсылаем клиенту строку = число1_число2
                
out.writeUTF(String.valueOf(Integer.valueOf(str[a])+" "Integer.valueOf(str[a+1])));
                
// выводим ее на экран
                
System.out.println(String.valueOf(Integer.valueOf(str[a])+" "Integer.valueOf(str[a+1])));
                
                
// ожидаем пока клиент пришлет строку текста
                
in.readUTF(); 
                
                
// отчет о клиенте
                
System.out.println("Client " num " got a pocket!");
                
System.out.println("\n---------------------------------------");
                 
  
        }catch(
Exception e)
        {
System.out.println("init error: "+e);} // вывод исключений
    
}



Клиент:
PHP код:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class 
Client extends Thread {

    public static 
void main(String[] argsthrows Exception {
        try {
            
            
// создаем сокет на локалхост, порт 6665
            
Socket socket = new Socket("localhost"6665);
            
            
// из сокета клиента берём поток входящих данных
            
InputStream sin socket.getInputStream();
            
            
// и оттуда же - поток данных от сервера к клиенту
            
OutputStream sout socket.getOutputStream();
            
            
// Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения
            
DataInputStream in = new DataInputStream(sin);
            
DataOutputStream out = new DataOutputStream(sout);
            
            
String line,null;
            
            
// ожидаем пока клиент пришлет строку текста
            
line in.readUTF();
            
            
//создает массив из чисел, разделенных пробелом
            
String str[] = line.split("[ ]");
            
            
System.out.println("I got a pocket!");
            
            
//сортировка пузырьком
            
if (Integer.valueOf(str[0]) > Integer.valueOf(str[1])) {
                
                
str[0];
                
str[0] = str[1];
                
str[1] = c;
                
            }
            
             
//отправляем серверу ответ           
             
out.writeUTF("I got it!");
             
             
//выводим то, что получилось на экран
             
System.out.println("line: "str[0] +" " str[1]);
                                     
        } catch(
Exception e// вывод исключений
        
{System.out.println("init error: "+e);}
    }  



Вот, что выдает сервер:

server is started

---------------------------------------

Client 1 connected!

Sending to 1 client!
6 5
Client 1 got a pocket!

---------------------------------------

Client 2 connected!

Sending to 2 client!
4 3
Client 2 got a pocket!

---------------------------------------

Client 3 connected!

Sending to 3 client!
2 1
Client 3 got a pocket!

---------------------------------------


Только по идее он должен выключаться при попытке подключить четвертый клиент, но он продолжает работать, а на клиент выдается вот это:
run:
init error: java.net.ConnectException: Connection refused: connect
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 2 секунды)

Последний раз редактировалось К@t@LoNeЦ, 22.05.2014 в 20:23.
Offline   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей - 0 , гостей - 1)
 

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.
Быстрый переход



18 ноября 2024 года. Понедельник - 20:36 (Часовой пояс GMT +4).