Вопрос скорее к знающим Java, но и от любой помощи не откажусь.
Столкнулся с задачей написать клиент-сервер на любом языке, решающий простое задание.
Т.к. сам сейчас начал изучать java, решил на нем и писать.
Задание - сортировка шести чисел по частям.
Имеется строка с шестью числами через пробел на сервере с ограничением на 3 клиентов.
Клиент разбивает этот "массив" (никакой это не массив, просто слово другого не смог подобрать) на 3 куска и отправляет клиентам, чтобы они каждый свой кусок отсортировали и вернули серверу, чтобы что-то еще кое-что дальше сделать, но до этого еще дойти надо....
Так вот, по не знанию матчасти столкнулся с вопросами:
1. у меня при описании сервера есть переменная i, с помощью которой я и подсчитываю клиенты и обрубаю подключения новых, когда i>3. Хотя в мануале написано про какой-то backlog.
.
.
.
public ServerSocket(int port,
int backlog)
throws IOException
Creates a server socket and binds it to the specified local port number, with the specified backlog. A port number of 0 creates a socket on any free port.
.
.
.
Как я понял, он и должен этим заниматься, и я поставил тройку после номера порта, но это ничего не дало. Скорее всего это я что-то делаю не так.
2. Не пойму как оперировать этими клиентами. Т.е. как сделать так, чтобы он первые 2 числа отправлял 1-му клиенту, вторые - 2-му, третьи - 3-му и чтобы я мог вывести на экран номер подключенного клиента. Знаю только как отправить что-то определенное и известное, но не в зависимости от номера клиента.
Server:
PHP код:
import java.io.*;
import java.net.*;
class Server extends Thread
{
Socket s;
public static void main(String args[])
{
try
{
int i = 0; // счётчик подключений
// привинтить сокет на локалхост, порт 6665
ServerSocket server = new ServerSocket(6665, 3);
System.out.println("server is started");
// слушаем порт
while(i<4)
{
// ждём нового подключения, после чего запускаем обработку клиента
// в новый вычислительный поток и увеличиваем счётчик на единичку
new Server(server.accept());
i++;
}
}
catch(Exception e)
{System.out.println("init error: "+e);
} // вывод исключений
}
public Server(Socket s)
{
// копируем данные
this.s = s;
// и запускаем новый вычислительный поток (см. ф-ю run())
setDaemon(true);
setPriority(NORM_PRIORITY);
start();
}
public void run()
{
try
{
InputStream sin = s.getInputStream();
OutputStream sout = s.getOutputStream();
DataInputStream in = new DataInputStream(sin);
DataOutputStream out = new DataOutputStream(sout);
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
String line = "12 2 12 4 5 6";
System.out.println("\nSending to " + " client!");
String str[] = line.split("[ ]");
out.writeUTF(String.valueOf(Integer.valueOf(str[0])+" "+ Integer.valueOf(str[1])));
System.out.println(String.valueOf(Integer.valueOf(str[0])+" "+ Integer.valueOf(str[1])));
in.readUTF();
System.out.println("Client got a pocket!");
}catch(Exception e)
{System.out.println("init error: "+e);} // вывод исключений
}
}
Client:
PHP код:
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client extends Thread {
public static void main(String[] args) throws Exception {
try {
Socket socket = new Socket("localhost", 6665);
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
DataInputStream in = new DataInputStream(sin);
DataOutputStream out = new DataOutputStream(sout);
String line,c = null;
line = in.readUTF();
String str[] = line.split("[ ]");
System.out.println("I got a pocket!");
if (Integer.valueOf(str[0]) > Integer.valueOf(str[1])) {
c = str[0];
str[0] = str[1];
str[1] = c;
}
out.writeUTF("I got it!");
System.out.println("line: "+ str[0] +" " + str[1]);
} catch(Exception e)
{System.out.println("init error: "+e);}
}
}
В гугле в основном простейшие эхо-серверы на одного клиента.