반응형
소캣통신
서버와 유저가 데이터를 주고받으려면
-> http 요청을 통해서
클라이언트: 데이터줘.
서버: 오케이.
실시간 리소스를 주어야할 때, 클라이언트: 내가 계속 요청을 해줘야해? 너가 그냥 알아서 보내주면 되잖아.
서버: 그럼 내가 server-sent event나 Web socket을 사용해볼게
server - sent event -> http통신을 종료안하고 계속 유지(단방향)
WebSocket -> http요청을 보내서 클라이언트: 오늘부터 웹소켓으로 할가?
서버: 좋아 그럼 websocket으로 업그레이드 해놓을게
<서버>
1. 서버소켓에 클라이언트의 주소와, 포트를 바인딩해준다.
2. 무한 루프를 돌면서 클라이언트의 접속을 대기한다.
3. 클라이언트가 인지 되었을 경우 인풋스트림과 아웃풋 스트림을 가져와 메세지를 받고, 메세지를 보내준다.
public static void main(String[] args) {
ServerSocket serverSocket = null;
Socket socket =null;
try{
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("0.0.0.0",8080));
while(true){
socket = serverSocket.accept();
InetSocketAddress clientAddr = (InetSocketAddress) socket.getRemoteSocketAddress();
socket.getRemoteSocketAddress();
System.out.println("Conneted:"+clientAddr.getAddress()+":"+clientAddr.getPort());
byte[] bytes = null;
String message = null;
InputStream is = socket.getInputStream();
bytes = new byte[100];
int readByteCount = is.read(bytes);
message = new String(bytes,0,readByteCount,"UTF-8");
System.out.println("Received: "+message);
OutputStream os = socket.getOutputStream();
message = "Hello Client!";
bytes = message.getBytes("UTF-8");
os.write(bytes);
os.flush();
System.out.println("Server: sent the message");
is.close();
os.close();
socket.close();
}
}catch (Exception e){
e.printStackTrace();
}
if(!socket.isClosed()){
try{
socket.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
<clinet>
1. 서버 주소와 포트를 통해 입장한다.
2. 서버에게 메세지를 보내준다.
3. 서버에게 메세지를 받는다.
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket();
System.out.println("Client!");
socket.connect(new InetSocketAddress("127.0.0.1",8080));
byte[] bytes = null;
String message = null;
OutputStream os = socket.getOutputStream();
message = "Hello Server";
bytes = message.getBytes("UTF-8");
os.write(bytes);
os.flush();
System.out.println("Message sent!");
InputStream is = socket.getInputStream();
bytes = new byte[100];
int readBytesCount = is.read(bytes);
message = new String(bytes,0,readBytesCount,"UTF-8");
System.out.println("Received: "+ message);
is.close();
os.close();
socket.close();
}catch (Exception e){
e.printStackTrace();
}
}
반응형
'CS' 카테고리의 다른 글
태태개발일지 - Docker (0) | 2025.04.16 |
---|---|
태태개발일지(CS지식) (0) | 2023.09.21 |
태태개발일지(운영체제) (0) | 2023.09.06 |
태태개발일지(운영체제) (0) | 2023.09.05 |
태태코딩(운영체제) (0) | 2023.08.31 |