День в истории - 14 июня

1925 год. Во время домашнего матча команды зрители освистали национальный гимн Испании, протестуя против режима диктатуры, за что правительство закрыло стадион "Лес Кортс" на шесть месяцев. Позже срок дисквалификации был сокращен вдвое.
Со дня этого события прошло 99 лет
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,310
Сказал(а) спасибо: 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 код Вкл.
Быстрый переход



14 июня 2024 года. Пятница - 05:26 (Часовой пояс GMT +4).