반응형
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
연결종료
반응형