Java/JAVA STUDY
JAVA 네트워크 _클라이언트/서버(client/server)
hansulin922
2021. 1. 29. 10:37
소켓 프로그래밍
Socket을 통해 client(사용자)와 server(예를 들면 구글, 네이버)를 연결
package exam01;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(5001);
//포트 번호. 운영체제는 프로세서를 포트번호로 관리.
//운영체제가 관리하는 프로세서의 고유번호.
//1~1000이 운영체재 내부에서 수행되는 프로세서에 부여. 여기는 건드리지 말자.
//안정적으로 번호를 부여하기 위해 5000번대 할당.
while(true) {//무한반복 //첫째줄에서 다음 사용자의 요청을 받아들임
Socket socket = serverSocket.accept();
//요청해올 때까지 기다리고 있음. 받는 순간 깨어남.
//소켓으로 오는 모든 정보를 heap 영역에 저장하고 있음.
ObjectInputStream inStream=
new ObjectInputStream( socket.getInputStream());
//소켓에서 필요한 정보를 꺼내오기 위해
//Stream 연결통로!
//인스턴스 꺼내오겠다. (+7개의 해더 정보 빼고)
String msg = inStream.readUTF();//Reads a String in modified UTF-8format.
System.out.println("Client가 전송해 온 메세지 : "+msg);
ObjectOutputStream outStream=
new ObjectOutputStream(socket.getOutputStream());
//출력용 연결 통로
//내가 보내려는 메세지를 오브젝트 형태로 담아주는 메모리 크기.
//오브젝트 타입으로 할당
outStream.writeUTF("Server Msg : "+msg+"님 반갑습니다.");
//클라이언트에게 전달하고 싶은 메세지를 입력으로
outStream.flush(); //(버퍼가 쌓일 때까지 보내지 않으니까..)
//지금 바로 전송해줘!
outStream.close();
inStream.close();
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package exam01;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
public class SocketClient {
public static void main(String[] args) {
String name = "사용자 이름";
try {
Socket socket = new Socket("localhost/*서버로사용할 IP주소*/", 5001);
//IP 적어줌(localhost), 5001포트번호 가진 프로세서에 전달해
ObjectOutputStream outStream =
new ObjectOutputStream(socket.getOutputStream());
outStream.writeUTF(name); //소켓 메세지(name)에 담아 네트웍을 통해 서버로 전달
outStream.flush();
ObjectInputStream inStream=
new ObjectInputStream(socket.getInputStream());
String msg = inStream.readUTF();
System.out.println("서버로부터 전송되어진 메세지 : \n"+msg);
inStream.close();
outStream.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}