자바 네트워크 프로 그래 밍 -> 상용 모듈

1. 자바 고객 센터 와 서버 인 스 턴 스:
import java.io.*;
import java.util.*;
import java.net.*;

/*
	                    ,   

		1、  ServerSocket,      
		2、accept()              。
		3、  Socket getInputStream()             。
			   ,  
			  Socket getOutputStream()             。
			      
		4、  socket
*/

//   
class MyServer 
{
	public static void main(String[] args) throws Exception
	{
		ServerSocket srv = new ServerSocket(8189);

		Socket so = srv.accept();
		InetAddress inet = so.getLocalAddress();

		String ip = inet.getHostAddress();

		System.out.println(ip + "..connected");
		//   
		InputStream inStream = so.getInputStream();
		//   
		OutputStream outStream = so.getOutputStream();

		Scanner in = new Scanner(inStream);
		PrintWriter out = new PrintWriter(outStream, true); //   

		//               ,      ,  BYE  
		boolean done = false;

		while (!done && in.hasNext())
		{
			String str = in.nextLine();
			out.println(str.toUpperCase());
			if (str.equals("BYE"))
			{
				done = true;
			}
		}

		so.close();
	}
}


//   

/*
	1、     
	2、           
	3、     
*/
class MyClient
{
	public static void main(String[] args) throws Exception
	{
		Socket so = new Socket("localhost",8190);
		
		//   
		InputStream inStream = so.getInputStream();
		//   
		OutputStream outStream = so.getOutputStream();

		Scanner in = new Scanner(inStream);
		PrintWriter out = new PrintWriter(outStream, true); //   

		//     
		Scanner keyIn = new Scanner(System.in);

		while (keyIn.hasNext())
		{
			String str = keyIn.nextLine();
			out.println(str);
			System.out.println(in.nextLine());
		}
		so.close();
	}
}

2. 상용 API
1. 소켓 류, 소켓
구조 방법: 모두 proctected 
Socket(String host, int port) 
          스 트림 소켓 을 만 들 고 지정 한 호스트 의 지정 한 포트 번호 에 연결 합 니 다.
   
Socket(InetAddress address, int port) 
          스 트림 소켓 을 만 들 고 지정 한 IP 주소 의 지정 한 포트 번호 에 연결 합 니 다.
          
   
방법:
   
void connect(SocketAddress endpoint) 
          이 소켓 을 서버 에 연결 합 니 다. 
     InetAddress getInetAddress() 
          소켓 연결 주 소 를 되 돌려 줍 니 다. 
   
InputStream getInputStream() 
          이 소켓 의 입력 흐름 을 되 돌려 줍 니 다.
     InetAddress getLocalAddress() 
          소켓 바 인 딩 된 로 컬 주소 가 져 오기 
     int getPort() 
          이 소켓 에 연 결 된 원 격 포트 를 되 돌려 줍 니 다.
     OutputStream getOutputStream() 
          이 소켓 의 출력 흐름 을 되 돌려 줍 니 다. 
     void setSoTimeout(int timeout) 
          지정 한 시간 초 과 를 가 진 SO 사용/사용 하지 않 기TIMEOUT, 밀리초 단위. 
     void shutdownInput() 
          이 소켓 의 입력 흐름 은 '흐름 의 끝' 에 있 습 니 다. 
 
void shutdownOutput() 
          이 소켓 의 출력 흐름 을 사용 하지 않 습 니 다. 
          
2. InetAddress 류 는 인터넷 프로 토 콜 (IP) 주 소 를 나타 낸다. 
static InetAddress getByName(String host) 
          호스트 이름 을 지정 한 상태 에서 호스트 의 IP 주 소 를 확인 합 니 다. 
     static InetAddress[] getAllByName(String host) 
          호스트 이름 을 지정 한 경우 시스템 에 설 정 된 이름 서비스 에 따라 IP 주소 로 구 성 된 배열 을 되 돌려 줍 니 다. 
     String getHostAddress() 
          IP 주소 문자열 을 되 돌려 줍 니 다. 
 
  String getHostName() 
          이 IP 주소 의 호스트 이름 을 가 져 옵 니 다.
3. InetSocketdress 류 는 IP 소켓 주소 (IP 주소 + 포트 번호) 를 실현 합 니 다.
 
구조 방법:
     InetSocketAddress(String hostname, int port) 
          호스트 이름과 포트 번호 에 따라 소켓 주 소 를 만 듭 니 다.
     InetSocketAddress(InetAddress addr, int port) 
          IP 주소 와 포트 번호 에 따라 소켓 주 소 를 만 듭 니 다.
    방법:
     InetAddress getAddress() 
          InetAddress 가 져 오기. 
 
  String getHostName() 
          hostname 가 져 오기. 
 
int getPort() 
          포트 번호 가 져 오기. 
 、     :     
import java.io.*;
import java.net.*;
import java.util.Scanner;

/*
	     ,          
	
	  :              ,          
*/

//    
class ServerThread implements Runnable
{
	private Socket so;
	ServerThread(Socket s) {
		this.so = s;
	}

	public void run() {
		try
		{
			InetAddress inet = so.getLocalAddress();
			String ip = inet.getHostAddress();

			System.out.println(ip + "..connected");
			//   
			InputStream inStream = so.getInputStream();
			//   
			OutputStream outStream = so.getOutputStream();

			Scanner in = new Scanner(inStream);
			PrintWriter out = new PrintWriter(outStream, true); //   

			//               ,      ,  BYE  
			boolean done = false;

			while (!done && in.hasNext())
			{
				String str = in.nextLine();
				out.println(str.toUpperCase());
				if (str.equals("BYE"))
				{
					done = true;
				}
			}
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				so.close();
			}
			catch (IOException ie)
			{
				ie.printStackTrace();
			}
		}
		
	}
}

class MySuperServer
{
	public static void main(String[] args) throws Exception
	{	
		ServerSocket s = new ServerSocket(8190);
		while(true)
		{
			Socket so = s.accept();

			Runnable r = new ServerThread(so);
			new Thread(r).start();
		}
	}
}

3. 다 중 스 레 드 마지막 그림
import java.io.*;
import java.net.*;
import static java.lang.Math.*;

/*
	       ,   

	1、  ServerSocket  
*/

//       
class PicThread implements Runnable
{	
	private Socket so;
	PicThread(Socket s) {
		this.so = s;
	}

	public void run() {
		try
		{
			//         IP  
			InetAddress inet = so.getInetAddress();
			String ip = inet.getHostAddress();
			System.out.println(ip + "..connected...");
			
			//     
			InputStream in = so.getInputStream();

			OutputStream out = so.getOutputStream();

		
			File picFile = new File(ip + "(" + (int)(random()*100) + ").jpg");
			
			FileOutputStream fos = new FileOutputStream(picFile);

			//    
			byte[] buf = new byte[1024];
			int len = 0;
			while ((len = in.read(buf)) != -1)
			{
				fos.write(buf, 0, len);
			}
			
			//            
			out.write("    ".getBytes());
			so.close();
			fos.close();

		}
		catch (Exception e)
		{
			new RuntimeException("      !");
		}
		
		
	}
}

//   
class UploadPicServer
{
	public static void main(String[] args) throws Exception
	{
		ServerSocket s = new ServerSocket(8999);

		while (true)
		{
			Socket so = s.accept();
			Runnable r = new PicThread(so);
			new Thread(r).start();
		}
	}
}

/*
	       
*/
class UploadPicClient
{
	public static void main(String[] args) throws Exception
	{
		Socket so = new Socket("127.0.0.1",8999);

		//   
		InputStream inStream = so.getInputStream();
		//   
		OutputStream outStream = so.getOutputStream();

		//     
		File picFile = new File(args[0]);

		FileInputStream fileIn = new FileInputStream(picFile);

		byte[] bufout = new byte[1024];
		int len = 0;
		while ((len = fileIn.read(bufout)) != -1)
		{
			outStream.write(bufout, 0, len);
		}
		so.shutdownOutput();

		//          
		byte[] bufIn = new byte[1024];
		int num = inStream.read(bufIn);
		System.out.println(new String(bufIn,0,num));

		so.close();
		inStream.close();
		outStream.close();
		fileIn.close();
	}
}

4. URL 클래스: URL 은 하나의 통 일 된 자원 포 지 셔 닝 부 호 를 대표 합 니 다.
1. 구조 방법: URL (String spec)            String 표시 형식 에 따라 URL 대상 을 만 듭 니 다.    URL(String protocol, String host, String file)            지정 한 protocol 이름, host 이름, file 이름 에 따라 URL 을 만 듭 니 다.  2. 상용 방법:  int getDefaultPort()            이 URL 과 연 결 된 프로 토 콜 의 기본 포트 번 호 를 가 져 옵 니 다.  String getFile()            이 URL 의 파일 이름 을 가 져 옵 니 다.  String getHost()            이 URL 의 호스트 이름 가 져 오기 (적용 된다 면).  String getPath()           이 URL 의 경로 부분 을 가 져 옵 니 다.  int getPort()           이 URL 의 포트 번 호 를 가 져 옵 니 다.  String getProtocol()           이 URL 의 프로 토 콜 이름 을 가 져 옵 니 다.  String getQuery()   이 URL 의 검색 부분 을 가 져 옵 니 다.URLConnection openConnection()            URL 에 인 용 된 원 격 대상 의 연결 을 나타 내 는 URLConnection 대상 을 되 돌려 줍 니 다.       InputStream openStream()            이 URL 의 연결 을 열 고 이 연결 에서 읽 을 InputStream 을 되 돌려 줍 니 다.6. URLConnection 류 는 응용 프로그램 과 URL 간 의 통신 링크 를 대표 합 니 다.1, 방법: String getHeaderField (String name)            지정 한 헤더 필드 의 값 을 되 돌려 줍 니 다.                  String getHeaderFieldKey(int n)            n 번 째 헤드 필드 의 키 를 되 돌려 줍 니 다.       Map> getHeaderFields()            헤더 필드 의 수정 할 수 없 는 맵 을 되 돌려 줍 니 다.     InputStream getInputStream()            이 열 린 연결 에서 읽 은 입력 흐름 을 되 돌려 줍 니 다.      OutputStream getOutputStream()            이 연결 에 기 록 된 출력 흐름 을 되 돌려 줍 니 다.       void setDoInput(boolean doinput)            이 URLConnection 의 doInput 필드 의 값 을 지정 한 값 으로 설정 합 니 다.    void setDoOutput(boolean dooutput)            이 URLConnection 의 doOutput 필드 의 값 을 지정 한 값 으로 설정 합 니 다. 
  :
import java.net.*;
import java.io.*;

/*
	URL  URLConnection
*/
class HttpTest 
{
	public static void main(String[] args) throws Exception
	{
		URL url = new URL("http://127.0.0.1/index.html");

		URLConnection u = url.openConnection();

		InputStream webFile = u.getInputStream();

		byte[] buf = new byte[1024];
		int len = 0;
		while ((len = webFile.read(buf)) != -1)
		{
			System.out.println(new String(buf, 0, len));
		}
		System.out.println(len);
		webFile.close();
	}
}

좋은 웹페이지 즐겨찾기