Light Blue Pointer
본문 바로가기
Developing/TIL(Develop)

Java Socket으로 localhost Server와 Client 만들고 연결하기

by Greedy 2022. 1. 18.

 

준비물 : 같은 네트워크 (같은 wifi등)를 이용하는 pc 두 개

두 pc의 ip주소의 xxx.xxx.xxx.yyy xxx가 동일하면 특별하지 않은 경우에는 다 됨 
내 pc ip주소 아는 방법 (클릭)

 

 

1. 서버측

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TcpIpServer {
	public static void main(String args[]) 
	{
		ServerSocket serversocket = null;

		try{
			serversocket = new ServerSocket(7779);//친구와 아무 번호나 사용했다. 8888 빼고는 다 됨.
			System.out.println(getTime()+"서버가 준비됨");
			
		}catch(IOException e) {
			e.printStackTrace();
		}

		while(true) 
		{
			try {
				System.out.println(getTime()+"연결요청기다림");
				//서버소켓은 클라이언트 연결요청 올때까지 기다림
				//클라이언트 연결요청이 오면 클라이언트 소켓과 통신할 새로운 소켓 생성
				Socket socket = serversocket.accept();
						System.out.println(getTime()+socket.getInetAddress()+"로부터 연결요청이 들어옴");

				//소켓의 출력스트림을 얻는다
				OutputStream out = socket.getOutputStream();
				DataOutputStream dos = new DataOutputStream(out);

				//원격 소켓에 데이터 보냄
				dos.writeUTF("[Notice]test message1 from server");
				System.out.println(getTime()+"데이터를 전송했음");


				dos.close();//스트림과 소켓 닫아줌
				socket.close();
			}catch(IOException e) {
				e.printStackTrace();
			}
		}
	}

	static String getTime() 
	{
		SimpleDateFormat f = new SimpleDateFormat("[hh:mm:ss]");
		return f.format(new Date());
	}
}

2. 클라이언트 측

import java.io.DataInputStream;
import java.io.*;
import java.io.InputStream;
import java.net.ConnectException;
import java.net.Socket;
public class TcpIpClient {
	public static void main(String args[]) 
	{
		try {
			String serverIp = "192.168.81.121"; //내 친구의 ip, 나와 마지막 .121 빼고는 동일하다.
			
			System.out.println("서버에 연결중임 서버 ip : "+serverIp);
			
			//소켓 생성해 연결 요청
			Socket socket = new Socket(serverIp,7778);
			
			//소켓 입력스트림 얻음
			InputStream in = socket.getInputStream();
			DataInputStream dis = new DataInputStream(in);
			
			//소켓으로부터 받은 데이터 출력
			System.out.println("서버로부터 받은 메시지 "+dis.readUTF());
			System.out.println("연결을 종료합니다");
			
			//스트림과 소켓을 닫는다
			dis.close();
			socket.close();
			System.out.println("연결이 종료됨");
		}catch(ConnectException ce) {
			ce.printStackTrace();
		}catch(IOException ie) {
			ie.printStackTrace();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}

 

3. 결과

내가 클라이언트 친구가 서버
친구가 서버 내가 클라이언트

 

'Developing > TIL(Develop)' 카테고리의 다른 글

HTML은 무엇인가? What is HTML?  (0) 2023.09.04
파이썬 기본 출력  (0) 2022.08.05
파이썬 기초 문법  (0) 2022.08.05
내 컴퓨터 ip주소 아는 법  (0) 2022.01.18
python3 print 자동개행 안되도록 하기  (0) 2021.08.01