
서버
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) {
ServerSocket serverSocket;
Socket socket = null;
try {
serverSocket = new ServerSocket(7777); //서버 생성
socket = serverSocket.accept();
Sender sender = new Sender(socket);
Receiver receiver = new Receiver(socket);
sender.start();
receiver.start();
}catch(Exception e) {
e.printStackTrace();
}
}
}
클라이언트
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
String serverIP = "192.168.0.43";
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();
}
}
}
sender
import java.io.DataOutputStream;
import java.net.*;
import java.util.Scanner;
public class Sender extends Thread{
Socket socket;
DataOutputStream out;
String name = "KINGSLAYER";
public Sender(Socket socket) {
try {
out = new DataOutputStream(socket.getOutputStream());
//name = "[" + socket.getInetAddress() + ":" + socket.getPort() + "]";
}catch(Exception e) {
}
}
@Override
public void run() {
Scanner sc = new Scanner(System.in);
while(out != null) {
try {
out.writeUTF(name + sc.nextLine());
}catch(Exception e) {
}
}
}
}
receiver
import java.io.DataInputStream;
import java.net.*;
public class Receiver extends Thread{
Socket socket;
DataInputStream in;
public Receiver(Socket socket) {
try {
in = new DataInputStream(socket.getInputStream());
}catch(Exception e) {
}
}
@Override
public void run() {
while(in != null) {
try {
System.out.println(in.readUTF()); // 한글도 안 깨지고 받을 수 있게 함.
}catch(Exception e) {
}
}
}
}
소켓은 TCP를 사용하는 두 컴퓨터 간의 통신 메커니즘을 제공한다. 클라이언트 프로그램은 통신 끝에 소켓을 만들고 해당 소켓을 서버에 연결하려고 시도한다. 연결이 생성되면 서버는 통신이 끝날 때 소켓 객체를 만든다. 클라이언트와 서버는 이제 소켓에 쓰고 읽는 방식으로 통신할 수 있다. java.net.Socket 클래스는 소켓을 나타내며 java.net.ServerSocket 클래스는 서버 프로그램이 클라이언트를 수신 대기하고 클라이언트와의 연결을 설정하는 메커니즘을 제공한다. 소켓을 써서 두 컴퓨터 간에 TCP 연결 설정 시 다음 단계가 발생한다.
연결이 설정되면 I/O 스트림을 사용해 통신할 수 있다. 각 소켓에는 OutputStream과 InputStream이 모두 있다. 클라이언트의 OutputStream은 서버의 InputStream에 연결되고, 클라이언트의 InputStream은 서버의 OutputStream에 연결된다. TCP는 양방향 통신 프로토콜이므로 두 스트림을 통해 동시에 데이터를 보낼 수 있다.
InetAddress getInetAddress() : 상대방 IP 정보 리턴
InetAddress getLocalAddress() : 자신의 IP 정보 리턴
int getPort() : 상대방 포트 번호
Int getLocalPort() : 자신의 포트 번호
InputStream getInputStream() : 데이터를 읽어오기 위한 스트림 리턴
OutputStream getOutputStream() : 데이터를 전송하기 위한 스트림 리턴
Web Server (= HTTP Server)
WAS (Web Application Server)
WAS = Web Server + Web Container
찾아간 IP 주소에서 실행하려는 프로그램 번호
데이터를 받을 프로세스가 어떤 것인지 알기 위해 사용하는 식별자
= 웹 애플리케이션 서버가 관리하는 경로
📌 네트워크상에서 컴퓨터와 컴퓨터, 통신 장비들이 통신하기 위해 약속한 통신 규약으로 각각의 목적에 맞는 통신을 위한 약속들
📌 통신을 원하는 두 개체 간에 무엇을, 어떻게, 언제 통신할 것인가에 대해 미리 정의된 상호간의 약속
Http(Hyper Text Transfer Protocol): 인터넷에서 하이퍼 텍스트 문서를 교환하기 위해 사용되는 프로토콜
FTP(File Transfer Protocol): 컴퓨터 사이의 원활한 파일 전송을 위해 사용되는 프로토콜
SMTP(Simple Mail Transfer Protocol): 사용자의 컴퓨터에서 작성된 메일을 받아서 다른 사람의 계정이 있는 곳으로 전송해주는 전자 우편 송신 프로토콜
POP(Post Office Protocol): 전송받은 메일을 저장하고 있다가 사용자가 메일 서버에 접속하면 이를 보내주는 역할을 하는 전자 우편 수신 프로토콜
DHCP(Dynamic Host Configuration Protocol): 클라이언트가 동적인 IP주소를 할당받아 인터넷을 사용할 수 있게 해주는 프로토콜, 고유한 IP주소를 가져야 다른 네트워크나 인터넷에 접속할 수 있는데 DHCP는 고유한 IP주소 없이 접속할 때 자동으로 새로운 IP주소를 할당해준다.