Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2012, 17:21   #1
good1984)))
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 25
По умолчанию счетчик букв

Программа сервера:
import java.io.*;//импорт каталога, содержащего классы для ввода/вывода
import java.net.*;//импорт каталога, содержащего классы для работы в сети Интернет

public class server {//описание класса server
public static void main(String[] arg) {//создание метода main, без которого Java-//интерпретатор не запустит класс, с входным параметром с именем args, который //является массивом объектов - представителей класса String.
ServerSocket serverSocket = null;//объявляется объект класса ServerSocket
Socket clientAccepted = null;//объявляется объект класса Socket
ObjectInputStream sois = null;//объявляется байтовый поток ввода
ObjectOutputStream soos = null;//объявляетя байтовый поток вывода
try {//ключевое слово механизма обработки исключений
System.out.println("server starting....");//вывод строки на консоль
serverSocket = new ServerSocket(2525);//создание сокета сервера для //заданного порта
clientAccepted = serverSocket.accept();//выполнение метода, которое //обеспечивает реальное подключение сервера к клиенту
System.out.println("connection established....");//вывод строки на //консоль

sois = new ObjectInputStream(clientAccepted.ge tInputStream());//создание потока ввода
soos = new ObjectOutputStream(clientAccepted.g etOutputStream());//создание потока вывода

String clientMessageRecieved = (String)sois.readObject();//объявляется //строка и ей присваиваются данные потока ввода, представленные ввиде строки //(передано клиентом)
while(!clientMessageRecieved.equals ("quite"))//выполнение цикла: пока //строка не будет равна "quite"
{
System.out.println("message recieved: '"+clientMessageRecieved+"'");//выведение на консоль строки и значения строковой //переменной
clientMessageRecieved = clientMessageRecieved.toUpperCase() ;//приведение символов строки к верхнему реестру
soos.writeObject(clientMessageRecie ved);//потоку вывода //присваивается значение строковой переменной (передается клиенту)
clientMessageRecieved = (String)sois.readObject();//строке //присваиваются данные потока ввода, представленные ввиде строки (передано клиентом)
}


}catch(Exception e) {//обработка исключения типа Exception

} finally {//исключение передается умалчиваемому обработчику
try {//ключевое слово механизма обработки исключений
sois.close();//закрывается поток ввода
soos.close();//закрывается поток вывода
clientAccepted.close();//закрывается сокет
serverSocket.close();//происходит отключение сервера от //клиента
} catch(Exception e) {//обработка исключения типа Exception
e.printStackTrace();//вызывается метод исключения е
}
}
}
}

Программа клиента:
import java.io.*;//импорт каталога, содержащего классы для ввода/вывода
import java.net.*;//импорт каталога, содержащего классы для работы в сети Интернет

public class client {//описание класса client
public static void main(String[] arg) {//создание метода main, без которого Java-//интерпретатор не запустит класс, с входным параметром с именем args, который //является массивом объектов - представителей класса String.
try {//ключевое слово механизма обработки исключений
System.out.println("server connecting....");//вывод строки на консоль
Socket clientSocket = new Socket("127.0.0.1",2525);//установление //соединения между локальной машиной и указанным портом узла Интернет
System.out.println("connection established....");//вывод строки на //консоль
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));//создание буферизированного символьного потока ввода

ObjectOutputStream coos = new ObjectOutputStream(clientSocket.get OutputStream());//создание потока вывода
ObjectInputStream cois = new ObjectInputStream(clientSocket.getI nputStream());//создание потока ввода
System.out.println("Enter any string to send to server \n\t('quite' - programme terminate)");//выод строки на консоль
String clientMessage = stdin.readLine();//ввод текста с клавиатуры
System.out.println("you've entered: "+clientMessage);//вывод на консоль //строки и значения строковой переменной
while(!clientMessage.equals("quite" )) {//выполнение цикла, пока строка //не будет равна "quite"
coos.writeObject(clientMessage);//потоку вывода присваивается //значение строковой переменной (передается серверу)
System.out.println("~server~: "+cois.readObject());//выводится на //экран содержимое потока ввода (переданное сервером)
.out.println("---------------------------");//выводится на //консоль
clientMessage = stdin.readLine();//ввод текста с клавиатуры
System.out.println("you've entered: "+clientMessage);//вывод на //консоль строки и значения строкой переменной
}
coos.close();//закрытие потока вывода
cois.close();//закрытие потока ввода
clientSocket.close();//закрытие сокетного соединения
}catch(Exception e) {//обработка исключения типа Exception
e.printStackTrace();}}}
good1984))) вне форума Ответить с цитированием
Старый 24.05.2012, 17:22   #2
good1984)))
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 25
По умолчанию

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

Что нужно сделать , чтобы сервер считал буквы и результат отправлял клиенту...
good1984))) вне форума Ответить с цитированием
Старый 24.05.2012, 23:20   #3
it-webwork
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 29
По умолчанию

Пример сервера на основе твоего кода на скорую руку

Код:

package abc;
import java.io.*;//импорт каталога, содержащего классы для ввода/вывода
import java.net.*;//импорт каталога, содержащего классы для работы в сети Интернет

public class server {//описание класса server
	public static void main(String[] arg) {//создание метода main, без которого Java-//интерпретатор не запустит класс, с входным параметром с именем args, который //является массивом объектов - представителей класса String. 
		ServerSocket serverSocket = null;//объявляется объект класса ServerSocket
		Socket clientAccepted = null;//объявляется объект класса Socket
		ObjectInputStream sois = null;//объявляется байтовый поток ввода
		ObjectOutputStream soos = null;//объявляетя байтовый поток вывода
		
		try {//ключевое слово механизма обработки исключений
			System.out.println("server starting....");//вывод строки на консоль
			serverSocket = new ServerSocket(2525);//создание сокета сервера для //заданного порта
			clientAccepted = serverSocket.accept();//выполнение метода, которое //обеспечивает реальное подключение сервера к клиенту
			System.out.println("connection established....");//вывод строки на //консоль
			
			sois = new ObjectInputStream(clientAccepted.getInputStream());//создание потока ввода
			soos = new ObjectOutputStream(clientAccepted.getOutputStream());//создание потока вывода
			
			String clientMessageRecieved = (String)sois.readObject();//объявляется //строка и ей присваиваются данные потока ввода, представленные ввиде строки //(передано клиентом)
			while(!clientMessageRecieved.equals ("quite"))//выполнение цикла: пока //строка не будет равна "quite"
			{
				clientMessageRecieved = clientMessageRecieved.toUpperCase() ;//приведение символов строки к верхнему реестру
				System.out.println("message recieved: '"+clientMessageRecieved+"'");//выведение на консоль строки и значения строковой //переменной
				
				// Здесь передаем результат функции подсчета в сокет
				soos.writeObject(calcABC(clientMessageRecieved));//потоку вывода //присваивается значение строковой переменной (передается клиенту)
				clientMessageRecieved = (String)sois.readObject();//строке //присваиваются данные потока ввода, представленные ввиде строки (передано клиентом)
			}
		}catch(Exception e)	{//обработка исключения типа Exception
		
		} finally {//исключение передается умалчиваемому обработчику
			try {//ключевое слово механизма обработки исключений
				sois.close();//закрывается поток ввода
				soos.close();//закрывается поток вывода
				clientAccepted.close();//закрывается сокет
				serverSocket.close();//происходит отключение сервера от //клиента
			} catch(Exception e) {//обработка исключения типа Exception
				e.printStackTrace();//вызывается метод исключения е
			}
		}
		
	}	
	
	/** Функция подсчета */
	public static String calcABC(String s){
		String vowels = " AEIOU";
		String consonants = "BCDFGHJKLMNPQRSTVWXYZ";
		int vowelsCount = 0;
		int consonantsCount = 0;
		
		for(char c:s.toCharArray()){
			if(vowels.contains(String.valueOf(c)))	vowelsCount++;
			if(consonants.contains(String.valueOf(c)))	consonantsCount++;
		}		
		
		return "vowels: "+vowelsCount+"  consonants: "+consonantsCount;
	}
	
}
it-webwork вне форума Ответить с цитированием
Старый 26.05.2012, 01:19   #4
good1984)))
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 25
По умолчанию

запускаю сервер и у меня выводит ошибку
Error: Could not find or load main class abc.server
good1984))) вне форума Ответить с цитированием
Старый 26.05.2012, 01:54   #5
it-webwork
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 29
По умолчанию

ну это скорее всего из за того, что я делал пример в пакете c названием abc
Просто не подумал что могут возникнуть с этим недопонимание
Убери из начала кода строчку с названием пакета
Код:
package abc;
И будет тебе счастье
it-webwork вне форума Ответить с цитированием
Старый 26.05.2012, 02:43   #6
good1984)))
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 25
По умолчанию

такая же ошибка и вот еще кое что написано было

C:\Users\Desktop\1\Server.java:4: error: class server is public, should be declared in a file named server.java
public class server {//описание класса server
^
1 error

Process completed.
good1984))) вне форума Ответить с цитированием
Старый 26.05.2012, 11:47   #7
it-webwork
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 29
По умолчанию

То просто в свою рабочую версию вставь функцию
Код:
/** Функция подсчета */
	public static String calcABC(String s){
		String vowels = " AEIOU";
		String consonants = "BCDFGHJKLMNPQRSTVWXYZ";
		int vowelsCount = 0;
		int consonantsCount = 0;
		
		for(char c:s.toCharArray()){
			if(vowels.contains(String.valueOf(c)))	vowelsCount++;
			if(consonants.contains(String.valueOf(c)))	consonantsCount++;
		}		
		
		return "vowels: "+vowelsCount+"  consonants: "+consonantsCount;
	}
А при отправке ответа клиенту в твоем цикле while просто отправляй ее результат. Для этого замени старую строчку кода:
Код:
coos.writeObject(clientMessage);//потоку вывода присваивается //значение строковой переменной (передается серверу)
на строчку с вызовом нашей функции
Код:
// Здесь передаем результат функции подсчета в сокет
soos.writeObject(calcABC(clientMessageRecieved));//потоку вывода //присваивается значение строковой переменной (передается клиенту)
А вообще данный код у меня работает без как либо проблем. Я пользуюсь средой Eclipce.
на тему твоей ошибки - Class Server является открытым, должен быть объявлен в файле с именем server.java
Очивидно ты закинул мой код в файл, который отличается названием от server.java
Название файла обязательно должно соответствовать названию класса.
Например:
class Test - test.java
или
class Server - server.java

PS.
Если бы ты пользовался одной из сред разработки, то таких бы проблем у тебя стало бы меньше

Последний раз редактировалось it-webwork; 26.05.2012 в 11:51.
it-webwork вне форума Ответить с цитированием
Старый 27.05.2012, 20:55   #8
good1984)))
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 25
По умолчанию

а какой Eclipce лучше скачать???
good1984))) вне форума Ответить с цитированием
Старый 27.05.2012, 22:55   #9
it-webwork
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 29
По умолчанию

Если честно, то я сильно не разбирался в этом вопросе. Лично я взял обычный Eclipse Classic сборки Helios
Скачать можно отсюда http://www.eclipse.org/downloads/pac...ase/helios/sr2
Уже пользуюсь больше года. Можно доставить нужные компоненты. Например инструменты разработки под Android. Есть конечно еще с визуальным построением форм NetBeans IDE, но мне она не очень понравилась. Но как говорят - на вкус и цвет ...
it-webwork вне форума Ответить с цитированием
Старый 28.05.2012, 00:40   #10
good1984)))
Пользователь
 
Регистрация: 18.12.2011
Сообщений: 25
По умолчанию

спасибо большое!!! все получилось)))))
good1984))) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определите сколько слов заданного текста составлено из букв русского алфавита, а сколько из букв латинского алфавита. Слова, в кот potemos Паскаль, Turbo Pascal, PascalABC.NET 2 18.04.2012 13:14
счетчик TotKtoNado Компоненты Delphi 10 26.02.2011 22:47
Подсчитать количество букв "А" в предложении и общее количество букв.В тексте из файла несколько строк. kvas91 Общие вопросы C/C++ 3 14.11.2010 16:51
Счетчик Alex_sim Помощь студентам 2 13.06.2010 04:30