728x90


이번에는 java에서 socketio를 해보는 예제를 하도록하자.

정확히 말하면 java socketio client이다. 서버쪽은 언급하지 않겠다.

일단 서버는 nodejs쪽의 소스를 그대로 인용하겠다. 참고의 2장 포스트를 참조하라.

이번에는 java로 클라이언트의 소스만 고쳐보도록하자.


일단 매우 많은 라이브러리가 필요하다. 필요한 라이브러리는 메이븐레포지터리에 검색하면 나오므로 찾는다.



일단 socket.io는 json이 움직이므로 gson을 사용하도록한다.

물론 gson말고 다른 json라이브러리를 사용해도 괜찮지만 이게 사용하기는 제일 좋다고 생각한다.



그 다음 socket io client를 내려받는다.


그럼 총 6개를 받아야된다. 왜냐하면 socket.io만 5개가 걸려있기 때문이다.

모르겠으면 버전이랑 이름보고 메이븐레포지터리에서 jar를 전부 받는다.

그리고 해당 jar파일을 프로젝트에 넣어준다.

넣는 방법을 모른다면 eclipse는 여기를 참조하고 intelliJ는 여기를 참조하라.


import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import io.socket.client.IO;
import io.socket.client.Socket;
import org.json.JSONObject;

import javax.swing.*;
import java.awt.*;
import java.net.URISyntaxException;


public class Main {
static Socket socket;
static JFrame jFrame;
static JTextArea jTextArea;
static JTextField jTextField;
static JPanel jPanel;
static JButton jButton;

public static void makeGUI() {
jFrame = new JFrame("MyFrame");
jFrame.setSize(500, 500);
jTextArea = new JTextArea();
jTextArea.setLineWrap(true);

jPanel = new JPanel();
jTextField = new JTextField(20);
jButton = new JButton("제출");
jButton.addActionListener((event) -> {
JsonObject preJsonObject = new JsonObject();
preJsonObject.addProperty("comment", jTextField.getText());
JSONObject jsonObject = new JSONObject(preJsonObject.toString());
socket.emit("reqMsg", jsonObject);
jTextField.setText("");
});

jPanel.add(jTextField);
jPanel.add(jButton);

jFrame.add(jPanel, BorderLayout.SOUTH);
jFrame.add(jTextArea);

jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setVisible(true);
}

public static void main(String[] args) {
makeGUI();
try {
socket = IO.socket("http://localhost:3100");
socket.on(Socket.EVENT_CONNECT, (Object... objects) -> {
JsonObject preJsonObject = new JsonObject();
preJsonObject.addProperty("roomName", "myroom");
JSONObject jsonObject = new JSONObject(preJsonObject.toString());
socket.emit("joinRoom",jsonObject);
}).on("recMsg", (Object... objects) -> {
System.out.println(objects[0]);
JsonParser jsonParsers = new JsonParser();
JsonObject jsonObject = (JsonObject) jsonParsers.parse(objects[0] + "");
jTextArea.append(jsonObject.get("comment").getAsString() + "");
});
socket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
}

GUI로 보여주기 위해서 Swing코드를 차용했다.

Swing부분을 빼고 Socket만 본다면 아래와 같다.


jButton.addActionListener((event) -> {
JsonObject preJsonObject = new JsonObject();
preJsonObject.addProperty("comment", jTextField.getText());
JSONObject jsonObject = new JSONObject(preJsonObject.toString());
socket.emit("reqMsg", jsonObject);
jTextField.setText("");
});
try {
socket = IO.socket("http://localhost:3100");
socket.on(Socket.EVENT_CONNECT, (Object... objects) -> {
JsonObject preJsonObject = new JsonObject();
preJsonObject.addProperty("roomName", "myroom");
JSONObject jsonObject = new JSONObject(preJsonObject.toString());
socket.emit("joinRoom",jsonObject);
}).on("recMsg", (Object... objects) -> {
System.out.println(objects[0]);
JsonParser jsonParsers = new JsonParser();
JsonObject jsonObject = (JsonObject) jsonParsers.parse(objects[0] + "");
jTextArea.append(jsonObject.get("comment").getAsString() + "");
});
socket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}

자바를 이해한다면 이 코드는 쉽게 이해할 수 있는 코드이다.

한번 실행해보도록하고 결과를 보자.



제대로 작동하는지 확인하자.

+ Recent posts