/******************************************************************************
* 파일 : MyFileServer.java
* 용도 : 파일 전송 서버
* 작성자 : 성홍제
* 작성일 : 2006. 08. 08
* Version : 1.0
******************************************************************************/
package Server;
import java.net.*;
import java.io.*;
public class MyFileServer
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
ServerSocket ss = null;
Socket socket = null;
//BufferedReader br = null; // 이건 문자로만 취급하므로 텍스트 파일만 취급 가능
//PrintWriter pw = null;
// 파일에서 읽어서 네트워크에 쓴다. 이건 1바이트 단위로 취급하므로
// 어떤 파일이든 취급 가능하다.
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
ss = new ServerSocket(10002);
while(true)
{
System.out.println("클라이언트의 접속을 기다립니다.");
socket = ss.accept();
// 접속하면 접속한 클라이언트의 IP 출력
InetAddress address = socket.getInetAddress();
System.out.println(address.getHostAddress() + " 로부터 접속하였습니다.");
//br = new BufferedReader(new )
bis = new BufferedInputStream(new FileInputStream("d:\\Test1.txt"));
bos = new BufferedOutputStream(socket.getOutputStream());
int b = 0;
while((b = bis.read()) != -1)
{
try
{
bos.write(b);
bos.flush();
}
catch(Exception e)
{
System.out.println("파일을 클라이언트에 보내던 중에 예외 발생");
e.printStackTrace();
}
}
System.out.println("전송을 완료했습니다.");
// 전송 완료하고, 그 클라이언트와의 연결을 끊은 후,
// 다른 클라이언트의 접속을 기다린다.
bos.close();
socket.close();
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
bis.close();
ss.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
/******************************************************************************
* 파일 : MyFileClient.java
* 용도 : 파일 전송 클라이언트
* 작성자 : 성홍제
* 작성일 : 2006. 08. 08
* Version : 1.0
******************************************************************************/
package Client;
import java.net.*;
import java.io.*;
public class MyFlieClient
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Socket socket = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
socket = new Socket("localhost", 10002);
bis = new BufferedInputStream(socket.getInputStream());
bos = new BufferedOutputStream(new FileOutputStream("d:\\Test2.txt"));
int b = 0;
while((b = bis.read()) != -1)
{
bos.write(b);
bos.flush();
}
System.out.println("파일을 다운로드 하였습니다.");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
bos.close();
bis.close();
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
/******************************************************************************
* 파일 : MyFileServer.java
* 용도 : 파일 전송 서버 - 쓰레드로 바꾼 것
* 작성자 : 성홍제
* 작성일 : 2006. 08. 08
* Version : 1.0
******************************************************************************/
package Server;
import java.net.*;
import java.io.*;
public class MyFileServer
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
ServerSocket ss = null;
Socket socket = null;
//BufferedReader br = null; // 이건 문자로만 취급하므로 텍스트 파일만 취급 가능
//PrintWriter pw = null;
// 파일에서 읽어서 네트워크에 쓴다. 이건 1바이트 단위로 취급하므로
// 어떤 파일이든 취급 가능하다.
BufferedInputStream bis = null;
try
{
// 처음에 한번만 생성해서 사용한다.
ss = new ServerSocket(10002);
bis = new BufferedInputStream(new FileInputStream("d:\\Test1.txt"));
while(true)
{
System.out.println("클라이언트의 접속을 기다립니다.");
socket = ss.accept();
// 접속하면 접속한 클라이언트의 IP 출력
InetAddress address = socket.getInetAddress();
System.out.println(address.getHostAddress() + " 로부터 접속하였습니다.");
MyFileServerThread mfst = new MyFileServerThread(bis, socket);
mfst.start();
}
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
try
{
bis.close();
ss.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
class MyFileServerThread extends Thread
{
/// Fields
private Socket socket = null;
private BufferedInputStream bis = null;
private BufferedOutputStream bos = null;
/// Constructor
MyFileServerThread(BufferedInputStream bis, Socket soc)
{
this.socket = soc;
this.bis = bis;
try
{
bos = new BufferedOutputStream(this.socket.getOutputStream());
}
catch (IOException e)
{
// TODO Auto-generated catch block
System.out.println("출력 스트림 생성 시 예외 발생");
e.printStackTrace();
}
}
/// Methods
public void run()
{
int b = 0;
while(true)
{
try
{
b = bis.read();
}
catch (IOException e1)
{
System.out.println("파일을 읽던 중에 예외 발생");
e1.printStackTrace();
}
if(b == -1)
break;
try
{
bos.write(b);
bos.flush();
}
catch(Exception e)
{
System.out.println("파일을 클라이언트에 보내던 중에 예외 발생");
e.printStackTrace();
}
}
System.out.println("전송을 완료했습니다.");
// 전송 완료하고, 그 클라이언트와의 연결을 끊은 후, 다른 클라이언트의 접속을 기다린다.
try
{
// bis는 서버에서 계속 사용하므로 쓰레드에서 닫으면 안된다.
bos.close();
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
/// Main
}
/******************************************************************************
* 파일 : MyFileClient.java
* 용도 : 파일 전송 클라이언트
* 작성자 : 성홍제
* 작성일 : 2006. 08. 08
* Version : 1.0
******************************************************************************/
package Client;
import java.net.*;
import java.io.*;
public class MyFlieClient
{
/**
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
Socket socket = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
socket = new Socket("localhost", 10002);
bis = new BufferedInputStream(socket.getInputStream());
bos = new BufferedOutputStream(new FileOutputStream("d:\\Test2.txt"));
int b = 0;
while((b = bis.read()) != -1)
{
bos.write(b);
bos.flush();
}
System.out.println("파일을 다운로드 하였습니다.");
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
bos.close();
bis.close();
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
/******************************************************************************
* 파일 : SimpleWebServer.java
* 용도 : 웹 서버 - 간단한 웹 서버 기능을 한다. 익스플로러에서 http://localhost:8081/파일명 * 이런 식으로
* 요청하면 웹 서버 폴더에 있는 파일을 보여준다.
* 작성자 : 성홍제
* 작성일 : 2006. 08. 08
* Version : 1.0
******************************************************************************/
package Server;
import java.net.*;
import java.io.*;
public class SimpleWebServer
{
/**
* @param args
*/
public static void main(String[] args)
{
Socket socket = null;
BufferedReader br = null;
BufferedReader fin = null;
PrintWriter pw = null;
try
{
ServerSocket ss = new ServerSocket(8081);
while(true)
{
System.out.println("클라이언트의 접속을 기다립니다.");
socket = ss.accept();
System.out.println("클라이언트가 접속했습니다.");
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = "";
try
{
line = br.readLine();
// HTTP 프로토콜에 정해진 대로 첫줄에 사용자가 요청한 파일명이 들어가있으므로
// 첫 줄을 읽어서, 사용자가 요청한 파일명을 얻어온다.
// indexOf(" ") - " "가 시작되는 인덱스를 리턴한다.
int start = line.indexOf(" ") + 2;
int end = line.lastIndexOf("HTTP") - 1;
String filename = line.substring(start, end);
System.out.println("클라이언트가 " + filename + "을 요청했습니다.");
fin = new BufferedReader(new FileReader(filename));
pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
String fline = null;
while((fline = fin.readLine()) != null)
{
//System.out.println(fline);
pw.println(fline);
pw.flush();
}
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if(fin != null)
fin.close();
if(pw != null)
pw.close();
if(br != null)
br.close();
if(socket != null)
socket.close();
}
}//while(true)
}
catch (Exception e)
{
e.printStackTrace();
}
}//public static void main(String[] args)
}
'프로그래밍 > Java' 카테고리의 다른 글
[펌] HttpURLConnection 을 이용하세요 (0) | 2009.01.02 |
---|---|
04 UDP (0) | 2007.11.27 |
02 2일째.... (0) | 2007.11.27 |
01 Network 첫시간... (0) | 2007.11.27 |
05 문자 단위 입출력 (0) | 2007.11.27 |