Страницы

Поиск по вопросам

среда, 5 декабря 2018 г.

Чат на Java

Хочу написать простой чат на Java сокетах без многопоточности. 1. Не очень понимаю как происходит соединение сокетом с другим компьютером, если передачей сокету ip, то как делать соединение по умолчанию при динамическом ip. 2. Какие классы ввода вывода использовать.


Ответ

Нужен клиент и сервер, клиенты подключаются к серверу, а он транслирует полученные сообщения всем подключенным клиентам. серверная часть: public class Server {
static ServerSocket socket; public static List clients = new ArrayList<>();
public static void main(String[] args) throws IOException {
socket = new ServerSocket(2000);
while (true) { ConnectedClient client = new ConnectedClient(socket.accept()); clients.add(client); client.start(); } } }
public class ConnectedClient extends Thread { private Socket sock; private BufferedReader input; private PrintWriter output;
public ConnectedClient(Socket s) throws IOException { sock = s; System.out.println("new user connected from " + s.getInetAddress().toString()); input = new BufferedReader(new InputStreamReader(sock.getInputStream())); output = new PrintWriter(sock.getOutputStream()); }
@Override public void run() { try { while (sock.isConnected()) { String readed = input.readLine(); for (CinnectedClient c : server.clients) { c.send(readed); } } } catch (IOException e) { System.out.println(e.toString()); } finally { System.out.println("user disconnected from " + sock.getInetAddress().toString()); } }
public void send(String s) throws IOException { output.println(s); output.flush(); } } клиентская часть: сокет для подключения к серверу: Socket s = new Socket(, <порт подключения>); аналогично серверу, берем InputStream и OutputStream у сокета: s.getInputStream() s.getOutputStream() и с их помощью читаем и пишем данные посланная в OutputStream строка придет в InputStream к пославшему и всем остальным клиентам, подключенным к серверу.

Комментариев нет:

Отправить комментарий