Network ( Ⅱ )
1. server
ex> MyServer01.java
package test01.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class MyServer01 {
public static void main(String[] args) {
ServerSocket server=null;
//키보드로부터 문자열을 입력받기 위한 스트림객체 얻어오기
BufferedReader br1=new BufferedReader(new InputStreamReader(System.in));
try{
server=new ServerSocket(3000);
System.out.println("서버가 실행됨");
Socket sock=server.accept();
System.out.println("클라이언트가 접속했습니다.");
//접속한 클라이언트의 ip주소에 대한 정보를 갖는 객체 얻어오기
InetAddress ia=sock.getInetAddress();
//클라이언트의 아이피주소 출력하기
System.out.println("접속자 ip:" + ia.getHostAddress());
//상대방에 데이터를 보내기위한 스트림객체 얻어오기
OutputStream os=sock.getOutputStream();
//1바이트처리스트림객체를 2바이트 처리스트림으로 변환하기
PrintWriter pw=new PrintWriter(os);
//상대방(클라이언트)가 보낸 데이터를 읽어오기 위한 스트림 얻어오기
InputStream in=sock.getInputStream();
//1바이트처리스트림을 2바이트 처리스트림으로 변환하기
BufferedReader br=new BufferedReader(new InputStreamReader(in));
while(true){
//상대방(클라이언트)가 보낸 문자열 읽어오기
String msg=br.readLine();
if(msg==null){
System.out.println("상대방이 접속을 해제했습니다.");
break;
}
System.out.println("상대방이보낸문자열>>" + msg);
System.out.println("클라이언트에 보낼 메시지입력");
String str=br1.readLine();//키보드로부터 문자열 입력받기
if(str.equals("exit")){
System.out.println("접속을 종료합니다.");
break;
}
pw.println(str);//상대방(클라이언트)에 문자열 보내기
pw.flush();//버퍼가 다 차지않아도 데이터 보내기
}
br.close();//스트림닫기
pw.close();//스트림닫기
sock.close();//소켓종료
server.close();//서버소켓종료
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
2. client
ex> MyClient01.java
package test01.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.io.OutputStream;
public class MyClient01 {
public static void main(String[] args) {
Socket sock=null;
//키보드로 문자열을 입력받기 위한 스트림객체 생성
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try{
sock=new Socket("192.168.0.2",3000);
//상대방에 데이터를 보내기위한 출력스트림 얻어오기
OutputStream out=sock.getOutputStream();
//1바이트처리스트림을 2바이트처리스트림으로 포장하기
PrintWriter pw=new PrintWriter(out);
//상대방이 보낸 데이터를 읽어오기위한 스트림 얻어오기
InputStream in=sock.getInputStream();
//1바이트처리스트림을 2바이트 처리스트림으로 포장하기
BufferedReader sbr=new BufferedReader(new InputStreamReader(in));
System.out.println("서버에 접속 성공!");
while(true){
System.out.println("서버로 보낼문자열 입력");
String msg=br.readLine();//키보드로 문자열 입력받기
if(msg.equals("exit")){
System.out.println("서버와 접속을 종료합니다.");
break;
}
pw.println(msg);//상대방(서버)에 msg보내기
pw.flush();//버퍼가 차지 않아도 데이터 내보내기
String str=sbr.readLine();//상대방이 보낸 문자열 읽어오기
if(str==null){//상대방이 접속을 종료한경우
System.out.println("상대방이 접속을 끊었습니다.");
break;
}
System.out.println("상대방이 보낸 문자열>>"+str);
}
sbr.close();//스트림닫기
pw.close();//스트림닫기
sock.close();//소켓닫기
}catch(UnknownHostException ue){
System.out.println(ue.getMessage());
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
[ 서버프로그램 ]
- 클라이언트가 접속해오면 클라이언트의 아이피주소를 출력하고 클라이언트의 아이피주소를 클라이언트에 보내기
[ 클라이언트프로그램 ]
- 서버에 접속하고 서버가 보내온 아이피주소(클라이언트의 아이피주소)를 읽어와 화면에 출력하기
ex> Quiz01
server >>
package test01.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Quiz01 {
public static void main(String[] args) {
ServerSocket server=null;
try{
server=new ServerSocket(3001);
System.out.println("서버실행");
Socket sock=server.accept();
System.out.println("클라이언트가 접속함");
InetAddress ia=sock.getInetAddress();
//클라이언트의 아이피주소 얻어오기
String ip=ia.getHostAddress();
System.out.println("접속한 클라이언트 ip주소:" + ip);
//상대방에 데이터를 보내기(출력)하기위한 스트림 생성하기
PrintWriter pw=new PrintWriter(sock.getOutputStream());
//상대방에 ip주소 보내기
pw.println(ip);
pw.flush();
//스트림닫기
pw.close();
//소켓닫기
sock.close();
server.close();
System.out.println("서버가 종료되었어요~~~");
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
client>>
package test01.net;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
public class Quiz01_client {
public static void main(String[] args) {
Socket sock=null;
try{
sock=new Socket("localhost",3001);
System.out.println("서버와의 접속성공!");
//서버가 보내온 데이터를 받기위한 스트림객체 생성
BufferedReader br=
new BufferedReader(new InputStreamReader(sock.getInputStream()));
//서버가 보내온 문자열 읽어오기
String ip=br.readLine();
System.out.println("서버가 보내준 내 ip주소:" + ip);
br.close();//스트림닫기
sock.close();//소켓닫기
}catch(UnknownHostException ue){
System.out.println(ue.getMessage());
}catch(IOException ie){
System.out.println(ie.getMessage());
}
}
}
3. 아이피 주소 얻어오기
ex> Test01_InetAddress.java
package test01.net;
import java.net.InetAddress;
import java.net.UnknownHostException;
public class Test01_InetAddress {
public static void main(String[] args) {
//public static InetAddress getByName(String host)
//throws UnknownHostException
try{
InetAddress ia=InetAddress.getByName("www.naver.com");
//호스트명에 해당하는 아이피주소 얻어오기
String ip=ia.getHostAddress();
System.out.println("naver ip주소:" + ip);
InetAddress local=InetAddress.getLocalHost();
System.out.println("local ip주소:" +local.getHostAddress());
}catch(UnknownHostException ue){
System.out.println(ue.getMessage());
}
}
}