Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Виснет многопоточный Socket-Server.??:(

Ответить
Настройки темы
Java - Виснет многопоточный Socket-Server.??:(

Пользователь


Сообщения: 96
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Здравств, идея проста сделать сервер для двух игроков и чтоб была возможность не только одним слушать порт. Тоисть многопоточный. Взял с туториалов стандартные примеры, но почему-то клиент виснет при чтении.
Виснет на этой строке
Код: Выделить весь код
this.responseMessage = dataInputStream.readUTF();
Я не могу отдебажить сервер. Не срабатывают брейкпоинты... Гляньте где ошибка...
Запуск и коннект происходит, - смотрел с дебаггером.
А вот дальше ничего посмотреть не могу..

Вот два стандартных класса(пока что тестовый вариант).
Код: Выделить весь код
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

 

Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Killer_13:
но почему-то клиент виснет при чтении. »
у меня клиент срабатывает, но выпадает здесь

Код: Выделить весь код
                 catch (IOException e) 
                {
                    
		}
проверяйте
DataInputStream
DataOutputStream

Отправлено: 22:40, 28-04-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Пользователь


Сообщения: 96
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата ferget:
у меня клиент срабатывает, но выпадает здесь »
- дык соственно спрашиваю, что не так, смотрел, проверял. Спасибо что попробовали...

-------
Не судите строго :) -> хттп:// jdev.name


Отправлено: 22:43, 28-04-2012 | #3


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить 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
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Спасиб, просмотрю, чем отличается от моего...

-------
Не судите строго :) -> хттп:// jdev.name


Отправлено: 23:40, 28-04-2012 | #5


Пользователь


Сообщения: 96
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Еще раз спасибо, ваш пример работает. думаю вопрос решен

-------
Не судите строго :) -> хттп:// jdev.name


Отправлено: 20:24, 29-04-2012 | #6


Пользователь


Сообщения: 96
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


А еще вот вопрос по теме..
Как мне определять двух игроков на одну игру?

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

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

Спасибо.

-------
Не судите строго :) -> хттп:// jdev.name


Отправлено: 21:49, 29-04-2012 | #7


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Killer_13:
Я мыслю в правильном направлении? »
не совсем понял ход мысли, но в простейшем случае должно быть так:
каждому одиночному серверу добавляется свойство имя, каждый клиент при подключении посылает свое имя
главный сервер содержит список всех имен и по запросу выдает кто подключен, если два клиента хотят играть, то для них создается игра

Отправлено: 14:49, 30-04-2012 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Виснет многопоточный Socket-Server.??:(

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход