package java_chat;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(7777); //port 번호
socket = serverSocket.accept();
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package java_chat;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) {
String serverIp = "127.0.0.1"; //자기 컴퓨터 IP
try {
Socket socket = new Socket(serverIp, 7777);
System.out.println("서버에 연결되었습니다.");
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package java_chat;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Sender extends Thread {
Socket socket;
DataOutputStream out;
String name;
public Sender(Socket socket) {
this.socket = socket;
try {
out = new DataOutputStream(socket.getOutputStream());
name = "["+socket.getInetAddress()+":"+socket.getPort()+"]";
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
while (out != null) {
try {
out.writeUTF(name + scanner.nextLine());
}catch (Exception e) {
}
}
}
}
package java_chat;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.Scanner;
public class Receiver extends Thread {
Socket socket;
DataInputStream in;
public Receiver(Socket socket) {
this.socket = socket;
try {
in = new DataInputStream(socket.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (in != null) {
try {
System.out.println(in.readUTF());
}catch (Exception e) {
}
}
}
}
Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식
서버와의 연결 / 서버로 데이터 전송 / 서버에서 데이터 리딩
일반적인 통신의 단계는
Step 1. 클라이언트가 호스트 이름 / IP 주소 및 포트 번호로 지정된 서버에 대한 연결 시작
Step 2. OutputStream을 사용하여 서버에 데이터 전송
Step 3. InputStream을 사용하여 서버에서 데이터를 읽음
Step 4. 연결을 종료
(Step 2와 Step 3은 통신의 성격에 따라 여러 번 반복 될 수 있다.)