Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Виснет многопоточный Socket-connect.??:( / 4 сообщений из 4, страница 1 из 1
28.04.2012, 18:10:13
    #37776297
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виснет многопоточный Socket-connect.??:(
Здравств, идея проста сделать сервер для двух игроков и чтоб была возможность не только одним слушать порт. Тоисть многопоточный. Взял с туториалов стандартные примеры, но почему-то клиент виснет при чтении.
Виснет на этой строке
Код: java
1.
this.responseMessage = dataInputStream.readUTF();


Я не могу отдебажить сервер. Не срабатывают брейкпоинты... Гляньте где ошибка...
Запуск и коннект происходит, - смотрел с дебаггером.
А вот дальше ничего посмотреть не могу..

Вот два стандартных класса(пока что тестовый вариант).
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
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();
	}
}



Код: 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.
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();
		}
	}
}


И вот мой тестовый клиент.
Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
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();
		}
	}
}



Спасибо.
...
Рейтинг: 0 / 0
29.04.2012, 06:07:36
    #37776581
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виснет многопоточный Socket-connect.??:(
Приветствую, _webdev_ !

Я бы посоветовал вам несколько упростить код сервера, к примеру -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
// Фрагмент для организации многопоточного сервера

ServerSocket s = new ServerSocket(.....);
...
// цикл
while(true) {
   Socket incoming = s.accept;
   Runnable r = new ThreadedHandler(incoming);

   Thread t = new Thread(r);
   t.start();
}
...



В методе run() класса ThreadedHandler обеспечить взаимодействие с клиентом -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
/**
* Фрагмент класса, обрабатывающего клиентские данные в рамках
* одного соединения
*/
class ThreadedHandler implements Runnable {
...
   try {
      InputStream inStream = incoming.getInputStream();
      OutputStream outStream = incoming.getOutputStream();
      // обработка входных данных и отсылка ответа
      incoming.close();
   }
   catch(IOException ioe) {
   ...
   }
}
...
...
Рейтинг: 0 / 0
29.04.2012, 21:49:05
    #37777016
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виснет многопоточный Socket-connect.??:(
Спасибо, мне уже подкинули рабочий вариант, не стал докапываться, почему у меня виснет, как вариант ваш возьму тоже к сведению.
А еще вот вопрос по теме..
Как мне определять двух игроков на одну игру?

К примеру таков вариант возможен, или это делается как-то по другому?

Один игрок, создает сервер, а у другого например в комбобоксе он появляется, другой соответственно берет это имя из комбобокса, топчет на сервер и спрашивает у него, - эй у тебя есть клиент с таким соединением, если есть, то что?
Я мыслю в правильном направлении?

Спасибо.
...
Рейтинг: 0 / 0
30.04.2012, 01:35:43
    #37777155
ivanov-void
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виснет многопоточный Socket-connect.??:(
_webdev_,

Вот тут что- то очень похожее на решение вашей задачи.
Посмотрите как реализован приемник InputStreamHandler в отдельном потоке, считывающий строковые данные, получаемые из InputStream.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Виснет многопоточный Socket-connect.??:( / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]