|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Виснет многопоточный Socket-Server.??:( |
|
Java - Виснет многопоточный Socket-Server.??:(
|
Пользователь Сообщения: 96 |
Профиль | Сайт | Отправить PM | Цитировать Здравств, идея проста сделать сервер для двух игроков и чтоб была возможность не только одним слушать порт. Тоисть многопоточный. Взял с туториалов стандартные примеры, но почему-то клиент виснет при чтении.
Виснет на этой строке Я не могу отдебажить сервер. Не срабатывают брейкпоинты... Гляньте где ошибка... Запуск и коннект происходит, - смотрел с дебаггером. А вот дальше ничего посмотреть не могу.. Вот два стандартных класса(пока что тестовый вариант). package chess.network; import java.io.IOException; import java.net.ServerSocket; public class ChessServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; boolean listening = true; System.err.println("SERVER!: 4444."); try { serverSocket = new ServerSocket(4444); } catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(-1); } while (listening) { new ChessMultiServerThread(serverSocket.accept()).start(); } serverSocket.close(); } } package chess.network; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class ChessMultiServerThread extends Thread { private Socket socket = null; public ChessMultiServerThread(Socket socket) { super("KKMultiServerThread"); this.socket = socket; } public void run() { try { System.out.println("Thred"); PrintWriter out = new PrintWriter(socket.getOutputStream()); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); System.out.println("In Stream: "+in.toString()); out.write("To Client"); System.out.println("Out Stream: "+out.toString()); out.flush(); out.close(); in.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } } package chess.network; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; public class CHClient { private Socket clientSocket; private InputStream inputStream; private OutputStream outputStream; private DataInputStream dataInputStream; private DataOutputStream dataOutputStream; private final String hostName = "localhost"; private final int PORT = 4444; private String requestMessage = null; private String responseMessage = null; public CHClient() { System.out.println("-CLIENT-"); try { this.clientSocket = new Socket(this.hostName, this.PORT); this.inputStream = clientSocket.getInputStream(); this.outputStream = clientSocket.getOutputStream(); this.dataInputStream = new DataInputStream(inputStream); this.dataOutputStream = new DataOutputStream(outputStream); this.requestMessage = "Lallllaaaaaa"; sendMessage(this.requestMessage); this.responseMessage = dataInputStream.readUTF(); System.out.println(this.responseMessage); System.out.println("ClientStopped!"); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { this.inputStream.close(); this.outputStream.close(); this.clientSocket.close(); } catch (IOException e) { e.printStackTrace(); } } } private void sendMessage(String msg) { try { this.dataOutputStream.writeUTF(msg); this.dataOutputStream.flush(); } catch (IOException e) { e.printStackTrace(); } } } |
|
Отправлено: 18:13, 28-04-2012 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать Цитата Killer_13:
проверяйте DataInputStream DataOutputStream |
|
Отправлено: 22:40, 28-04-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 96
|
Профиль | Сайт | Отправить PM | Цитировать Цитата ferget:
|
|
------- Отправлено: 22:43, 28-04-2012 | #3 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать вот пример рабочего клиент сервера
сервер package nserver; import java.io.*; import java.net.Socket; public class ServerOne extends Thread { private Socket socket; private BufferedReader in; private PrintWriter out; public ServerOne(Socket s) throws IOException { socket = s; in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket .getOutputStream())), true); start(); } @Override public void run() { try { while (true) { String str = in.readLine(); if (str.equals("END")) break; System.out.println("Echoing: " + str); out.println(str); } System.out.println("closing..."); } catch (IOException e) { System.err.println("IO Exception"); } finally { try { socket.close(); } catch (IOException e) { System.err.println("Socket not closed"); } } } } package nserver; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class MServer { static final int PORT = 8888; public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(PORT); System.out.println("Server Started"); try { while (true) { Socket socket = s.accept(); try { ServerOne serverOne = new ServerOne(socket); } catch (IOException e) { socket.close(); } } } finally { s.close(); } } } package nserver; import java.io.*; import java.net.InetAddress; import java.net.Socket; public class Client { public static void main(String[] args) throws IOException { int PORT = 8888; InetAddress addr = InetAddress.getByName(null); System.out.println("addr = " + addr); Socket socket = new Socket(addr, PORT); try { System.out.println("socket = " + socket); BufferedReader in = new BufferedReader(new InputStreamReader(socket .getInputStream())); PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())), true); for (int i = 0; i < 10; i++) { out.println("HELLO " + i); String str = in.readLine(); System.out.println(str); } out.println("BYE"); } finally { System.out.println("closing..."); socket.close(); } } } |
Отправлено: 23:33, 28-04-2012 | #4 |
Пользователь Сообщения: 96
|
Профиль | Сайт | Отправить PM | Цитировать Спасиб, просмотрю, чем отличается от моего...
|
|
------- Отправлено: 23:40, 28-04-2012 | #5 |
Пользователь Сообщения: 96
|
Профиль | Сайт | Отправить PM | Цитировать Еще раз спасибо, ваш пример работает. думаю вопрос решен
|
------- Отправлено: 20:24, 29-04-2012 | #6 |
Пользователь Сообщения: 96
|
Профиль | Сайт | Отправить PM | Цитировать А еще вот вопрос по теме..
Как мне определять двух игроков на одну игру? К примеру таков вариант возможен, или это делается как-то по другому? Один игрок, создает сервер, а у другого например в комбобоксе он появляется, другой соответственно берет это имя из комбобокса, топчет на сервер и спрашивает у него, - эй у тебя есть клиент с таким соединением, если есть, то что? Я мыслю в правильном направлении? Спасибо. |
------- Отправлено: 21:49, 29-04-2012 | #7 |
Разный Сообщения: 1294
|
Профиль | Отправить PM | Цитировать Цитата Killer_13:
каждому одиночному серверу добавляется свойство имя, каждый клиент при подключении посылает свое имя главный сервер содержит список всех имен и по запросу выдает кто подключен, если два клиента хотят играть, то для них создается игра |
|
Отправлено: 14:49, 30-04-2012 | #8 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Многопоточный сканер сети на .bat | Anonymоus | Скриптовые языки администрирования Windows | 2 | 07-08-2019 09:28 | |
PowerShell - [блог] Многопоточный сканер сети | Xaegr | Скриптовые языки администрирования Windows | 0 | 02-10-2011 21:30 | |
PowerShell - [блог] Многопоточный сканер сети | Xaegr | Скриптовые языки администрирования Windows | 0 | 12-07-2011 14:30 | |
[решено] Socket AM3 на Socket AM2 | sLiDeR-X | Выбор отдельных компонентов компьютера и конфигурации в целом | 8 | 31-01-2010 11:50 | |
UltraVNC - socket error while writing (Windows Server 2003) | Rockon | Microsoft Windows NT/2000/2003 | 1 | 11-12-2008 09:48 |
|