nodejs가 대부분 웹사이트 만들기 위한 도구로 알고 계신 분이 많은 것 같습니다.
It seems like most people know nodejs as a tool for creating websites.
아래는 nodejs를 서버로 사용하고 자바를 채팅 클라이언트로 사용하는 매우 간단한 프로그램입니다.
Below is a very simple program that uses nodejs as a server and java as a chat client.
기초를 쌓는데 도움이 되리라 생각합니다.
I think it will help build a foundation.
자바 컴파일시 한글문자가 있기 때문에 UTF-8인코딩으로 컴파일하고 실행도 UTF-8로 실행해야 합니다.
Since there are Korean characters when compiling Java, you must compile it in UTF-8 encoding and run it in UTF-8 as well.
compile : javac -encoding UTF-8 FILENAME.java
command prompt run : java -Dfile.encoding=UTF-8 FILENAME
window powershell run : java “-Dfile.encoding=UTF-8” FILENAME
server.js는 nodejs서버 프로그램입니다. server.js is a nodejs server program.
ChatClientGUI.java는 GUI프로그램입니다. ChatClientGUI.java is a GUI program.
ChatClinet는 명령프롬프트를 사용하는 프로그램입니다. ChatClient is a program that uses a command prompt.
server.js
const net = require('net');
const server = net.createServer((socket) => {
console.log('클라이언트가 연결되었습니다.\nThe client is connected');
socket.on('data', (data) => {
console.log('클라이언트로부터 받은 데이터\nData received from client:', data.toString());
socket.write('서버가 받은 데이터를 다시 보냅니다\nThe server sends back the data it received.: ' + data);
});
socket.on('end', () => {
console.log('클라이언트 연결이 끊어졌습니다.\nThe client connection was lost.');
});
socket.on('error', (err) => {
console.error('클라이언트 소켓 에러\nclient socket error:', err);
});
});
const port = 3000;
server.listen(port, () => {
console.log(`서버가 포트 ${port}에서 리스닝 중입니다.\nThe server is listening on port ${port}.`);
});
server.on('error', (err) => {
console.error('서버 에러server error:', err);
});
Client.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
String serverAddress = "localhost"; // 서버 주소 : server address
int serverPort = 3000; // 서버 포트 : server port
try (
Socket socket = new Socket(serverAddress, serverPort);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Scanner scanner = new Scanner(System.in)
) {
System.out.println("서버에 연결되었습니다.\n server connected");
String userInput;
while (true) {
System.out.print("보낼 메시지 sendmessage: ");
userInput = scanner.nextLine();
if ("exit".equalsIgnoreCase(userInput)) {
break;
}
out.println(userInput);
String serverResponse = in.readLine();
System.out.println("서버 응답 server response: " + serverResponse);
}
System.out.println("연결을 종료합니다. Server connection terminated");
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 인코딩 문제가 있을 수 있으니 메세지 발송시 영문으로 테스트 할것
// 윈도우 파워쉘인경우 오류 날 수 있으니 명령프롬프트를 사용 할 것
// There may be encoding issues, so please test in English when sending the message.
// If you are using Windows Powershell, you may get an error, so use the command prompt.
//
// UTF-8컴파일:UTF-8compile : javac -encoding UTF-8 Client.java
// UTF-8실행:UTF-8 run : java -Dfile.encoding=UTF-8 Client
//
// 윈도우 파워쉘 실행: window powershell run : java "-Dfile.encoding=UTF-8" Client
ChatClientGUI.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ChatClientGUI extends JFrame implements ActionListener {
private static final String SERVER_ADDRESS = "localhost";
private static final int SERVER_PORT = 3000;
private JTextArea chatArea;
private JTextField messageInput;
private JButton sendButton;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public ChatClientGUI() {
setTitle("채팅 클라이언트/chat client");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLayout(new BorderLayout());
chatArea = new JTextArea();
chatArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(chatArea);
add(scrollPane, BorderLayout.CENTER);
JPanel inputPanel = new JPanel(new BorderLayout());
messageInput = new JTextField();
sendButton = new JButton("보내기/send");
sendButton.addActionListener(this);
inputPanel.add(messageInput, BorderLayout.CENTER);
inputPanel.add(sendButton, BorderLayout.EAST);
add(inputPanel, BorderLayout.SOUTH);
setVisible(true);
connectToServer();
}
private void connectToServer() {
try {
socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
chatArea.append("서버에 연결되었습니다.\nsercer connected");
// 서버로부터 메시지를 수신하는 스레드 시작
Thread receiveThread = new Thread(this::receiveMessages);
receiveThread.start();
} catch (IOException e) {
chatArea.append("서버 연결에 실패했습니다: " + e.getMessage() + "\n");
}
}
private void receiveMessages() {
String message;
try {
while ((message = in.readLine()) != null) {
chatArea.append("서버server: " + message + "\n");
}
} catch (IOException e) {
chatArea.append("서버 연결이 끊어졌습니다.\nFailed to connect to server.");
} finally {
closeConnection();
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == sendButton) {
String message = messageInput.getText();
if (!message.isEmpty()) {
out.println(message);
chatArea.append("나Me: " + message + "\n");
messageInput.setText("");
}
}
}
private void closeConnection() {
try {
if (out != null) out.close();
if (in != null) in.close();
if (socket != null && !socket.isClosed()) socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(ChatClientGUI::new);
}
}
// 인코딩 문제가 있을 수 있으니 메세지 발송시 영문으로 테스트 할것
// 윈도우 파워쉘인경우 오류 날 수 있으니 명령프롬프트를 사용 할 것
// There may be encoding issues, so please test in English when sending the message.
// If you are using Windows Powershell, you may get an error, so use the command prompt.
//
// UTF-8컴파일:UTF-8compile : javac -encoding UTF-8 ChatClientGUI.java
// UTF-8실행:UTF-8 run : java -Dfile.encoding=UTF-8 ChatClientGUI
//
// 윈도우 파워쉘 실행: window powershell run : java "-Dfile.encoding=UTF-8" ChatClientGUI