Server
- 요청을 받고 응답을 할 수 있는 시스템
- Web Server
- 웹브라우저를 통해 웹서비스를 제공
웹브라우저 | IIS | MS기반 언어(ASP, 닷넷) | |
Tomcat | JSP언어 / 무료 | 사이트 하나만 가능, 개인 홈페이지 | |
JBoss / Resin | JSP언어 / 유료 | ||
Linux 운영체제 기반 | PHP언어 / 무료 |
- Database Server
- 대용량 저장 장소
- 관계형 데이터베이스 (시험출제) - 빅데이터
: Oracle DB, MySQL DB, Maria DB, MS-SQL DB, Orient DB, SQLite
- No SQL 데이터베이스
: Mongo DB, 카산드라
- Mail Server
소켓& serversocket
: network패키지에 들어있음
- 소켓 (socket) : 네트워크 프로그래밍을 위한 인터페이스
- ServerSocket
Client
- 요청하는 시스템
예시 1) server->client 정보전달하기
server1
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/*
실행순서 (명령프롬프트에서 테스트)
시작-> cmd
>d:
>cd java0514
>cd basicNetwork
>cd src
*/
public class Server1 {
public static void main(String[] args) {
//서버 구축
//클라이언트보다 먼저 실행되어 클라이언트의 접속 요청을 기다리며,
//클라이언트가 접속하면 양방향 통신을 할 수 있는 Socket 객체를 생성합니다.
ServerSocket server=null;
try{
//port번호 server통하는 전용문 0~65535
//Server1 클래스만 사용하는 port번호 2019
server = new ServerSocket(2019);
//포트번호 기다림
while(true){
System.out.println("\n클라이언트 접속 대기중...");
//다른 socket과 해당 포트의 데이터를 송수신합니다.
Socket socket=server.accept();
System.out.println("[접속]접속IP:"+socket.getInetAddress().getHostAddress());
//요청한 사용자 PC에 메세지 출력
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write("[운영자]/1.토이스토리/2.알라딘/3.기생충");
writer.newLine(); //줄바꿈
writer.flush(); //client에 전송
socket.close(); //접속사 연결종료
}//while end
}catch(Exception e){
System.out.println("서버문제발생 : "+e);
}finally{
//finally문 안에도 try문이 들어올 수 있다.
try{
server.close(); //자원반납
}catch(Exception e){}
System.out.println("서버 프로그램 실행 종료!");
}//try end
}//main() end
}//class end
Server - cmd창
SERVER 클래스는 클라이언트에게 주기 위해 만든 서버구축하기
서버 프로그램 실행종료! 가 뜬 이유는 이클립스에서도 실행이 되고 있어서 에러가 발생한 것이다.
이클립스를 끈 후 다시 실행하니 클라이언트 접속 대기중.. 이라고 뜨며 제대로 실행되었다.
client1
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
/*
실행순서(명령프롬포트에서 테스트)
시작->cmd
>d:
>cd java0514
>cd workspace
>cd basicNetwork
>javac Client1.java
>java Client1 요청서버IP
*/
public class Client1 {
public static void main(String[] args) {
//클라이언트 구축
Socket socket=null;
try{
//>java Client1 172.16.83.100
socket=new Socket(args[0], 2019); //args : 서버ip , 2019 : port번호
System.out.println("[접속]서버IP:"+socket.getInetAddress().getHostAddress());
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=reader.readLine();
String[] movie=line.split("/");
System.out.println("----------------------");
for(int idx=0; idx<movie.length; idx++){
System.out.println(movie[idx]);
}//for end
System.out.println("----------------------");
}catch(Exception e){
System.out.println("클라이언터 문제발생:"+e);
}finally{
try{
socket.close(); //자원반납
}catch(Exception e){}
System.out.println("서버 프로그램 실행 종료!");
}//try end
}//main() end
}//class end
Client - cmd창
1. >java Server1
2.
예시 2) client->server 정보전달하기
server2
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server2 {
public static void main(String[] args) {
//2) 클라이언트가 서버 측에 메세지 전송
//-> Server2.java와 Client2.java
ServerSocket server=null;
try{
server = new ServerSocket(2020);
System.out.println("\n클라이언트 접속 대기중...");
while(true){
Socket socket=server.accept();
System.out.println("[접속]서버IP:"+socket.getInetAddress().getHostAddress());
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line=reader.readLine();
String[] str=line.split("/");
System.out.println("----------------------");
for(int idx=0; idx<str.length; idx++){
System.out.println(str[idx]);
}//for end
System.out.println("----------------------");
try{
socket.close(); //접속자 연결 종료
}catch(Exception e) {}
}//while end
}catch(Exception e){
System.out.println("서버문제발생:"+e);
}finally{
try{
server.close();//자원반납
}catch(Exception e){}
System.out.println("서버 프로그램 실행 종료!");
}//try end
}//main() end
}//class end
client2
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class Client2 {
public static void main(String[] args) {
// 클라이언트 구축
Socket socket=null;
try{
socket = new Socket(args[0], 2020);
System.out.println("[접속]접속IP:"+socket.getInetAddress().getHostAddress());
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write("[간식]/1.사탕/2.초코렛/3.마카롱");
writer.newLine(); //줄바꿈
writer.flush(); //server에 전송
}catch(Exception e){
System.out.println("클라이언트 문제발생 : "+e);
}finally{
//finally문 안에도 try문이 들어올 수 있다.
try{
socket.close(); //자원반납
}catch(Exception e){}
System.out.println("서버 프로그램 실행 종료!");
}//try end
}//main() end
}//class end
채팅프로그램만들기
1) Server 구축하기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
//------------------------------------------------------------------------------------------------------------------------------------
class ChatClientRead extends Thread{
private Socket socket;
private String line;
public ChatClientRead(){}
public ChatClientRead(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
line=reader.readLine(); //네트워크로부터 전송받음
if(line==null) break;
System.out.println("\n"+line); //enter+line 출력
System.out.println(" [운영자] ");
}//while end
}catch(Exception e){
System.out.println("연결이 되어있지 않습니다."+e);
}finally{
try{
socket.close();
}catch(IOException e){ //입력exception
e.printStackTrace();
}
}//try end
}//run() end
} //class end 42행
//------------------------------------------------------------------------------------------------------------------------------------
class ChatClientSend extends Thread{
private Socket socket;
private BufferedWriter writer;
private BufferedReader in;
private String str=""; //출력결과
public ChatClientSend(){}
public ChatClientSend(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try{
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println(" [운영자] ");
str=in.readLine();
if(str.equals("exit")) break;
writer.write(" [운영자] "+str);
writer.newLine(); //줄바꿈
writer.flush(); //Server로 전송
}//while end
}catch(Exception e){
System.out.println("데이터 전송 실패! :"+e);
}finally{
try{
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}//try end
}//run() end
} //class end 45행
//------------------------------------------------------------------------------------------------------------------------------------
public class ChatClientThread {
private Socket socket=null;
public void clientStart(String ip, int port){
System.out.println("클라이언트 프로그램 작동...");
try{
socket=new Socket(ip,port);
//socket으로부터 데이터를 읽어오는 쓰레드
ChatClientRead read=new ChatClientRead(socket);
read.start();
//키보드에서 입력받아 socket으로 데이터를 보내는 쓰레드
ChatClientSend send=new ChatClientSend(socket);
send.start();
}catch(Exception e){
System.out.println("서버와 연결 실패:"+e);
}finally{
try{
if(socket==null) socket.close();
}catch(IOException e){
e.printStackTrace();
}
}//try end
}//clientStart() end
public static void main(String[] args) {
// 클라이언트 구축
ChatClientThread cc=new ChatClientThread();
cc.clientStart(args[0], 6901);
}//main() end
}//class end
2) Client 구축하기
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
//------------------------------------------------------------------------------------------------------------------------------------
class ChatClientRead extends Thread{
private Socket socket;
private String line;
public ChatClientRead(){}
public ChatClientRead(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true){
line=reader.readLine(); //네트워크로부터 전송받음
if(line==null) break;
System.out.println("\n"+line); //enter+line 출력
System.out.println(" [운영자] ");
}//while end
}catch(Exception e){
System.out.println("연결이 되어있지 않습니다."+e);
}finally{
try{
socket.close();
}catch(IOException e){ //입력exception
e.printStackTrace();
}
}//try end
}//run() end
} //class end 42행
//------------------------------------------------------------------------------------------------------------------------------------
class ChatClientSend extends Thread{
private Socket socket;
private BufferedWriter writer;
private BufferedReader in;
private String str=""; //출력결과
public ChatClientSend(){}
public ChatClientSend(Socket socket){
this.socket=socket;
}
@Override
public void run() {
try{
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
in=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println(" [운영자] ");
str=in.readLine();
if(str.equals("exit")) break;
writer.write(" [운영자] "+str);
writer.newLine(); //줄바꿈
writer.flush(); //Server로 전송
}//while end
}catch(Exception e){
System.out.println("데이터 전송 실패! :"+e);
}finally{
try{
socket.close();
}catch(IOException e){
e.printStackTrace();
}
}//try end
}//run() end
} //class end 45행
//------------------------------------------------------------------------------------------------------------------------------------
public class ChatClientThread {
private Socket socket=null;
public void clientStart(String ip, int port){
System.out.println("클라이언트 프로그램 작동...");
try{
socket=new Socket(ip,port);
//socket으로부터 데이터를 읽어오는 쓰레드
ChatClientRead read=new ChatClientRead(socket);
read.start();
//키보드에서 입력받아 socket으로 데이터를 보내는 쓰레드
ChatClientSend send=new ChatClientSend(socket);
send.start();
}catch(Exception e){
System.out.println("서버와 연결 실패:"+e);
}finally{
try{
if(socket==null) socket.close();
}catch(IOException e){
e.printStackTrace();
}
}//try end
}//clientStart() end
public static void main(String[] args) {
// 클라이언트 구축
ChatClientThread cc=new ChatClientThread();
cc.clientStart(args[0], 6901);
}//main() end
}//class end
'공부 > 응용 SW' 카테고리의 다른 글
6월20일 - SW활용 Oracle (0) | 2019.06.20 |
---|---|
6월19일 - SW활용 : DB (0) | 2019.06.19 |
6월17일 - SW활용 운영체제 + 네트워크(thread) (0) | 2019.06.17 |
6월13일 - DOS명령어 만들기 (0) | 2019.06.13 |
6월12일 - properties + singleton (0) | 2019.06.12 |