![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2012
Сообщений: 58
|
Код сервера:
package server;
import java.io.*;
import java.net.*;
public class GameServer {
public static void main(String[] args) {
try {
ServerSocket serv = new ServerSocket(12000);
while (true) {
//ожидание клиента
Socket sock = serv.accept();
System.out.println("New user has entered.\n" + sock.getInetAddress().getHostName() + " connected");
/*создание отдельного потока для обмена
данными с соединившимся клиентом*/
ServerThread server = new ServerThread(sock);
server.start();//запуск потока
}
} catch (IOException error) {
System.err.println(error);
}
}
}
class ServerThread extends Thread {
private PrintStream os;//передача
private BufferedReader is;//чтение
private InetAddress addr;//адрес клиента
public ServerThread(Socket s) throws IOException {
os = new PrintStream(s.getOutputStream());
is = new BufferedReader(
new InputStreamReader(
s.getInputStream()));
addr = s.getInetAddress();
}
public void run() {
int i = 0;
String str;
try {
while ((str = is.readLine()) != null) {
if ("PING".equals(str))
os.println("PONG "+ ++i);
System.out.println("PING-PONG" + i
+ " with " + addr.getHostName());
}
} catch (IOException e) {
//если клиент не отвечает, соединение с ним разрывается
System.out.println("Disconnect");
} finally {
disconnect();//уничтожение потока
}
}
public void disconnect() {
try {
System.out.println(addr.getHostName()
+ " disconnected");
os.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
this.interrupt();
}
}
}
public function Main() { // constructor code socket.addEventListener (Event.CONNECT, onConnect) socket.addEventListener (IOErrorEvent.IO_ERROR, onError) socket.addEventListener (SecurityErrorEvent.SECURITY_ERROR, onError) socket.connect (ip, port) Aut.addEventListener (MouseEvent.CLICK, onAut) } private function onAut(event:MouseEvent):void { if (socket.connected) { socket.writeUTFBytes ("PING") //socket.writeUTFBytes ("aut login= me pass= please") socket.flush () reading.appendText ("Sending authorize Data.\n") } } P S И заодно, почему-то когда клиент подключается к серверу реакция сервера на клиент заторможенная(сообщение о подключении у клиента идет сразу, а у сервера через несколько секунд) Добавлено через 7 часов 51 минуту Не знаю почему форум молчит, думал ответят за 5 минут) (не в укор вам конечно) Нашел некоторую зацепку, попробовал однопоточный сервер. import java.io.*;
import java.net.*;
class SimpleServer
{
ServerSocket socket;
Socket incoming;
BufferedReader readerIn;
PrintStream printOut;
public static void main(String[] args)
{
int port = 12000;
try
{
port = Integer.parseInt(args[0]);
}
catch (ArrayIndexOutOfBoundsException e)
{
// Catch exception and keep going.
}
new SimpleServer(port);
}
private SimpleServer(int port)
{
System.out.println(">> Starting SimpleServer");
try
{
socket = new ServerSocket(port);
incoming = socket.accept();
System.out.println("New user connected");
readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
printOut = new PrintStream(incoming.getOutputStream());
// System.out.println("Enter EXIT to exit.\r");
boolean done = false;
while (!done)
{
String str = readerIn.readLine();
if (str == null)
{
done = true;
}
else
{
out("Echo: " + str + "\r");
if(str.trim().equals("EXIT"))
{
done = true;
}
}
incoming.close();
}
}
catch (Exception e)
{
System.out.println(e);
}
}
private void out(String str)
{
printOut.println(str);
System.out.println(str);
}
}
class ClientConnector {
public void Connector ()
{
}
}
>> Starting SimpleServer New user connected Echo: aut me pleasereg me please0reg me please0 сообщения были 1. aut me please 2. reg me please0 3. reg me please0 Подключается мгновенно, но сообщения приходят тоже после отключения клиента, похоже, что сервер не видит конец сообщения... Возможно это поможет быстрее решить проблему... Добавлено через 8 часов 6 минут Проблема подвисаний была в addr.getHostName(). Еще надеюсь получить ответ на вопрос о приходе данных. Добавлено через 9 часов 8 минут Понял то, что сервер не видит окончания сообщения. Добавлено через 25 часов 57 минут Проблема была в readLine, спасибо. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|