powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Виснет многопоточный Socket-connect.??:(
4 сообщений из 4, страница 1 из 1
Виснет многопоточный Socket-connect.??:(
    #37776297
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравств, идея проста сделать сервер для двух игроков и чтоб была возможность не только одним слушать порт. Тоисть многопоточный. Взял с туториалов стандартные примеры, но почему-то клиент виснет при чтении.
Виснет на этой строке
Код: 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
Виснет многопоточный Socket-connect.??:(
    #37776581
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, _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
Виснет многопоточный Socket-connect.??:(
    #37777016
_webdev_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, мне уже подкинули рабочий вариант, не стал докапываться, почему у меня виснет, как вариант ваш возьму тоже к сведению.
А еще вот вопрос по теме..
Как мне определять двух игроков на одну игру?

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

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

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

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


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