Да, если вы знаете, каковы адреса ваших получателей, это довольно легко. Просто отправлять сообщения в виде обычного текста через соединение, разделенные новой линии, нуль-терминатором, писать длину сообщения перед текстом и т.д.
Ниже приведен пример класса для клиента сети:
import java.net.Socket;
import java.net.InetAddress;
import java.net.SocketTimeoutException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.InputStream;
public class Networker{
private Socket conn;
public void connectTo(InetAddress addr)throws IOException{
conn = new Socket(addr, 8989); //Second argument is the port you want to use for your chat
conn.setSoTimeout(5); //How much time receiveMessage() waits for messages before it exits
}
public void sendMessage(String message)throws IOException{
//Here I put one byte indicating the length of the message at the beginning
//Get the length of the string
int length = message.length();
//Because we are using one byte to tell the server our message length,
//we cap it to 255(max value an UNSIGNED byte can hold)
if(length > 255)
length = 255;
OutputStream os = conn.getOutputStream();
os.write(length);
os.write(message.getBytes(), 0, length);
}
//Checks if a message is available
//Should be called periodically
public String receiveMessage()throws IOException{
try{
InputStream is = conn.getInputStream();
int length = is.read();
//Allocate a new buffer to store what we received
byte[] buf = new byte[length];
//The data received may be smaller than specified
length = is.read(buf);
return new String(buf, 0, length);
}catch(SocketTimeoutException e){} //Nothing special,
//There was just no data available when we tried to read a message
return null;
}
}
Хотя, Я слышал, что некоторые брандмауэры блокируют входящие соединения, и в этом случае вы должны использовать UDP. Проблема с ней заключается в том, что ее ненадежность (иначе, если вы просто отправляете сообщения, они могут не прийти к дестанации)
Реальная проблема с P2P в моем решении - найти сверстников (на самом деле, только один необходим , потому что после этого наш новый сверстник расскажет нам о своих сверстниках, и об этих сверстниках об их сверстниках и т. д.)
Короткий ответ: да. Вы должны иметь возможность напрямую подключаться к любому внешнему IP-адресу, учитывая, что он не заблокирован брандмауэром или плохой связью. Если вам нужна только одноранговая связь, а не групповой мессенджер, это должно быть довольно легко написать, используя базовые сокеты. – venture
Звучит как-то для веб-сайтов. Я думаю, что пакет 'javax.websocket' довольно прост в использовании. Это может помочь: http://stackoverflow.com/questions/26452903/javax-websocket-client-simple-example – Gendarme