HAN1110 9899e780ba984d89824a90ee8deb7cb2
출처는 여기에 있습니다
주의! 해당 강좌는 이 게시글을 봐주신 분들을 기준으로 제작되였습니다. 보지 않았으면 보고 와주세요.
안녕하세요! HAN1110 입니다!
오늘은 자바로 서버를 만들어보겠습니다. (찐입니다. 기초 아닙니다)
일단 클래스부터 만듭시다.
전 그때 그 KOR V1 라이브러리 (정확힌 B1.5) 있는 프로젝트에
net.koreaminecraft.other
이라는 패키지를 만들고
그 패키지에 client 와 server 을 만들었습니다.
일단 Server 라는 클래스를 만들게요.
package net.other.koreaminecraft.Client; public class Client { public Client() { } public static void main(String[] args) { } }
이렇게 해뒀습니다. (+ 이게 서버인건 죄송해요!)
자 , 이제 try catch 문을 넣을겁니다 하기전에 일단 client 를 해둘게요(?)
제 뜻이 이해 안되는분들을 위해 소스코드를 보여드리자면
package net.other.koreaminecraft.Client; public class Client { public Client() { } public static void main(String[] args) { new Client(); } }
로 했습니다.
이제 서버소캣을 생성해줍시다.
아 맞다. 이제 Client 메소드에서만 활동할겁니다. 그렇게 알고계세요.
아 서버소캣 하기전에 try catch 문을 만듭시다.
try { } catch (Exception e) { }
이유는 어떤 에러가 나든 일단 해결하기 위해서에요.
catch 는 try 가 끝난 뒤에합시다.
try 부터!
서버소캣을 생성합시다.
try { ServerSocket server; } catch (Exception e) { }
어라?????
또 오류가 나네요?
당연합니다.
살펴볼까요?
왜일까요?
ServerSocket 은 java.net(링크라고 생각하지 마세요. 링크 어쩌다 걸린거에요) 패키지에 있답니다~
package net.other.koreaminecraft.Client; import java.net.ServerSocket; public class Client { public Client() { try { ServerSocket server; } catch (Exception e) { } } public static void main(String[] args) { new Client(); } }
이렇게 됩니다.
좋아요 , 이제 Socket 과 BufferedReader 을 다시 넣어줍시다.
아 맞다 , 소캣들 빼고는 다 java.io 패키지에요.
알고가세요!
ServerSocket server; Socket connection; BufferedReader in;
쉽죠?
메시지를 받아야하니 String 문자열을 만들어둡시다.
ServerSocket server; Socket connection; BufferedReader in; String msg;
이제 String 빼고 다 값을 null 로 설정해줄거에요.
초기에 설정해줘도 되는데 글 길이 때문에 (ㅎㅎ;;;;;;;)
ServerSocket server; Socket connection; BufferedReader in; String msg; server = null; connection = null; in = null
쉽죠?
이제 try catch 문을 달아줄겁니다.
바로 달러갑시다.
ServerSocket server; Socket connection; BufferedReader in; String msg; server = null; connection = null; in = null; try { } catch (IOException ioe) { }
어라? 또 에러가 나네요.
사실 이건 서버와 관련된 정보가 없어서 에러가 나는겁니다.
저희는 사실 여기에 5000 포트로 서버소캣을 생성하려고 왔어요.
에러가 나면 "소캣을 생성하지 못했습니다" 라고 할게요.
ServerSocket server; Socket connection; BufferedReader in; String msg; server = null; connection = null; in = null; try { server = new ServerSocket(5000); } catch (IOException ioe) { System.out.println("소캣을 생성하지 못했습니다."); }
이제 및으로 가서 메시지를 기다리는중이라고 출력할게요. ( + 그냥 풀소스 공유!)
//Server 클래스 package net.other.koreaminecraft.Server; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class Server { public Server() { try { ServerSocket server; Socket connection; BufferedReader in; String msg; server = null; connection = null; in = null; try { server = new ServerSocket(5000); } catch (IOException ioe) { System.out.println("소캣을 생성하지 못했습니다."); } System.out.println("메시지를 기다리는중"); in = new BufferedReader(new InputStreamReader(connection.getInputStream())); //소켓에서 입력스트림을 가져옵니다 while ((msg = in.readLine()) != null) { // 클라이언트에서 입력된 메시지를 받습니다 System.out.println("받은 메시지 : "); } System.out.println("서버 종료"); in.close(); //각각의 기능을 닫습니다. connection.close(); server.close(); } catch (Exception e) { } } public static void main(String[] args) { new Server(); } }
package net.other.koreaminecraft.Client; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Client { public Client() { try { Socket client; PrintWriter out; Scanner in = new Scanner(System.in); String msg; client = null; out = null; try { client = new Socket(); System.out.println("서버와 연결 시도중"); client.connect(new InetSocketAddress("localhost",5000),3000); System.out.println("서버와 연결 성공"); } catch (Exception e) { System.out.println("알수없는 오류"); } out = new PrintWriter(client.getOutputStream(), true); System.out.println("메시지를 보내시요"); while((msg = in.nextLine()) != null) { if (!msg.equals(null)) { break; } out.println(msg); System.out.println("보낼 메시지가 더 있으면 더 보내세요"); } System.out.println("클라이언트가 종료되였습니다."); out.close(); in.close(); client.close(); } catch (Exception e) { System.out.println("[Exception] 알수없는 오류로 인한 클라이언트 종료"); } } public static void main(String[] args) { new Client(); } }
서버를 먼저 실행하고 클라이언트를 실행하면..!
저도 모르지만 서버가 종료됩니다.
일단 제 컴의 문제지 님들 컴의 문제는 아니에요.
다음엔 GUI 강좌로 찾아뵙겠습니다!
ㅂㅂ
허두
2021.11.18선생님..! 여기 connection = server.accept(); 구문 빠진것같아요..!
HAN1110
2021.11.18으어ㅓㅓㅓ! 정확하네요! 진짜 빠짐. ㄷㄷㄷㄷㄷ.
근데 문제는 BufferedReader 에서 오류가 난다는점.
해결 부탁드려요
허두
2021.11.18아잌ㅋㅋㅋㅋㅋㅋㅋㅋ 무슨 오류가 나는데요?
HAN1110
2021.11.19connection = server.accept();
가 없어서 일어나는 문제요
허두
2021.11.19? 그거 넣어주시면 해결 아닌가용
HAN1110
2021.11.20예.
허두
2021.11.20??? 저만 이해 안되는거 아니져?
HAN1110
2021.11.20맞을걸요?
하이라이트|highright
2021.11.18전 귀찮아서 netty 배웁니다 ㅋㅋㅋㅋㅋㅋ
HAN1110
2021.11.18그게 뭐에요?
하이라이트|highright
2021.11.28언블로킹 비동기 이벤트식 네트워킹 프레임워크입니다
속도도 더 빠르고 전 netty부터 배워서 ㅋㅋ
HAN1110
2021.11.29비동기가 무어지.....
하이라이트|highright
2021.12.01많이 배우시고 오시면 됩니다~
명이
2021.11.19패키지 이름이 대문자요?
:\
HAN1110
2021.11.19예?
첫글자가 대문자만 아니면 됩니다
명이
2021.11.19패키지 네임에 소문자를 사용하는것은 권고사항이긴 하지만, 국제적인 규칙이긴 해서...
HAN1110
2021.11.19국제적 규칙이요?
명이
2021.11.19ㅖ...
그리고, 보통 패키지 이름은 자신이 소유한 도메인을 사용합니다.
만약 본인이 koreaminecraft.net을 소유하고 계시다면 net.koreaminecraft.~~로 사용하실 수 있습니다.
프로젝트
2021.11.19그리고 패키지에는 대문자가 절때로 들어가지 않는것이 규칙이구요,
HAN1110
2021.11.19예ㅖㅖㅖㅖㅖㅖㅖㅖㅖ???????????????????????????????
망.했.다.
HAN1110
2021.11.19전 한마포에 올리려고 저렇게 하고있었는데요?
따로 이유가 있으니 그건 무시해주시고 ㅋㅋ
명이
2021.11.19net.other.koreaminecraft가 거슬렸을뿐입니당
HAN1110
2021.11.19엨ㅋㅋㅋㅋㅋㅋㅋ