CS/네트워크

java를 이용한 소켓프로그래밍

씩씩한 IT블로그 2023. 6. 13. 00:11
반응형

TCP IP 소켓 프로그래밍

- TCP IP 프로그래밍을 통한 통신 실습

- client에서 데이터를 주고, server에서 받고, 다시 server에서 데이터를 주고 client에서 데이터를 받는 순서

 

예시코드

TcpServer.java

package clip18;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.time.LocalTime;

public class TcpServer {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;

        try {
            serverSocket = new ServerSocket(8888);
            System.out.println("["+ LocalTime.now()+"] 서버가 준비되었습니다.");
        } catch (IOException e) {
            System.out.println(e.getLocalizedMessage());
            e.printStackTrace();
        }

        while(true) {
            try {
                System.out.println("--------------------------------------------");
                System.out.println("["+ LocalTime.now()+"] 연결요청을 기다립니다.");
                Socket socket = serverSocket.accept();
                System.out.println("["+ LocalTime.now()+"] 연결이 되었습니다.");

                // 데이터 받기(inputStream)
                InputStream inputStream = socket.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

                String inputString = bufferedReader.readLine();
                System.out.println("message from clinet : "+inputString);

                // 데이터 보내기(outputStream)
                OutputStream outputStream = socket.getOutputStream();

                DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
                dataOutputStream.writeUTF("World");


                System.out.println("[" + LocalTime.now()+"]"+" 데이터를 전송했습니다. ");
                dataOutputStream.close();
                socket.close();
                System.out.println("--------------------------------------------");

            } catch (IOException e) {
                System.out.println(e.getLocalizedMessage());
                e.printStackTrace();
            }
        }


    }
}

 

TcpClient.java

* outstream에 write를 할때 항상 마지막에 줄바꿈(\n)를해주어야 한다. 그래야 데이터가 전송됨.

package clip18;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.time.LocalTime;

public class TcpClient {
    public static void main(String[] args) {

        try {
            String serverIp = "localhost";
            System.out.println("[" + LocalTime.now()+"]"+"서버에 연결합니다");
            System.out.println("[" + LocalTime.now()+"]"+"서버 ip : "+serverIp);
            Socket socket = new Socket(serverIp, 8888);

            // 데이터 보내기(outputStream)
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("Hello\n".getBytes(StandardCharsets.UTF_8)); //줄바꿈(\n)을 넣어야 write가 완료된다.
            outputStream.flush();

            // 데이터 받기(inputStream)
            InputStream inputStream = socket.getInputStream();
            DataInputStream dataInputStream = new DataInputStream(inputStream);

            System.out.println("message from server : " + dataInputStream.readUTF());
            dataInputStream.close();
            socket.close();
            System.out.println("연결종료");

        } catch (IOException e){
            throw new RuntimeException(e);
        }

    }
}

 

결과값

TcpServer.java

> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE

> Task :TcpServer.main()
[00:05:57.510] 서버가 준비되었습니다.
--------------------------------------------
[00:05:57.511] 연결요청을 기다립니다.
[00:06:08.586] 연결이 되었습니다.
message from clinet : Hello
[00:06:08.587] 데이터를 전송했습니다. 
--------------------------------------------
--------------------------------------------
[00:06:08.588] 연결요청을 기다립니다.

 

TcpClient.java

> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE

> Task :TcpClient.main()
[00:06:08.568]서버에 연결합니다
[00:06:08.568]서버 ip : localhost
message from server : World
연결종료

 

반응형