クライアントサーバー、より正確にはJavaでソケットプログラミングを作成するのはこれが初めてです。 ポートを提供するサーバーを作成しています。同じシステムでいくつかのクライアントウィンドウを起動し、クライアントからメッセージを送信すると、サーバーを介して各クライアントにメッセージがブロードキャストされます。同じサーバーコードを別のシステムでLAN経由で実行しても、問題は発生しません。 データは放送されていません。以下は私のサーバーコードです-
public void run() {
try {
serverSocket = new DatagramSocket(9878);
group = InetAddress.getByName("230.0.0.1");
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
while (true) {
try {
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);
serverSocket.receive(receivePacket);
receiveData = receivePacket.getData();
if (receivePacket.getLength() > 0) {
String sentence = new String(receivePacket.getData());
DatagramPacket packet = new DatagramPacket(sendData,
sendData.length, group, 9879);
serverSocket.send(packet);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
今、私のクライアントは次の方法でサーバーにデータを送信しています-
private final void sendDatatoServer(){
IPAddress = InetAddress.getByName("localhost");
String sentence = strTitle+" : "+textPane.getText();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9878);
textPane.setText("");
try {
clientSocket.send(sendPacket);
} catch (IOException e1) {
e1.printStackTrace();
}
}
そして再び私はこのようにサーバーから放送されたデータを読んでいます-
try {
address = InetAddress.getByName("230.0.0.1");
socket = new MulticastSocket(9879);
socket.joinGroup(address);
byte[] buf = new byte[256];
packet = new DatagramPacket(buf, buf.length);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
runnableTask = backgroundExec.submit(new Runnable() {
@Override
public void run() {
while(true){
try {
socket.receive(packet);
String received = new String(packet.getData(), 0, packet.getLength());
setEditor(received);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});