JAVA - 쌩기초... 조금만 조언을 주세요.

maindb의 이미지

JAVA 에 대해서는 기본적인... 이것이 무엇인지만 압니다.

간단한 네트웍 소켓 데몬이 필요해서 java.sun.com 을 둘러보니
좋은 예제가 있어서 가져와서 실행하여보니 아주 잘 됩니다.
근데... 문제는 조금 수정을 해야 하는데 이게 문제군요 ㅡㅡ;;;
스스로 생각해 봐도 그 해결해야될 문제가 워낙에 기초적인 부분인데...

어쨌든... 원하는 것은...

어떤 ip (예. 192.168.100.100) 에 소켓접속을 해서
fput 으로 /home 이라는 문자열을 날렸다고 가정합니다.

이와 같은 상황일때 192.168.100.100 에는 이미
소켓서버가 실행되어 있습니다.
리쓴해서 외부 프로그램을 실행하면 되는것입니다.
exec 죠...
위 예를 들자면 ls -al /home
과 같은 경우 입니다.
즉... 다른곳에서 날린 문자열을 받아서
서버쪽에서 ls -al 문자열
을 실행하는 것입니다.

sun 싸이트에서 select 방식의 소켓서버 소스가 있더군요.
아래와 같습니다.
아래 소스에서
Process pc = runtime.exec(?????????????????);

의 물음표 부분에서 실행하면 되겠죠?
그런데... 소켓 접속해서 날려준 문자열을 받아서 처리해야 하는데
어떻게 해야 할까요?
이미 다 있는것 같은데 기본적인 부분을 몰라서 해결을 하지 못하고
있습니다.

조금만 도움을 주시면 감사드립니다.

import java.io.*; 
import java.net.*; 
import java.nio.*; 
import java.nio.channels.*; 
import java.util.*; 

public class process_server { 

 private static int PORT = 9876; 
 private static int BUFFER_SIZE = 2048; 

 public static void main (String args[]) { 

   ByteBuffer sharedBuffer =  
     ByteBuffer.allocateDirect(BUFFER_SIZE); 
   Selector selector = null; 
     ServerSocket serverSocket = null; 

   try { 
     ServerSocketChannel serverSocketChannel = 
       ServerSocketChannel.open(); 
     serverSocketChannel.configureBlocking(false); 

     serverSocket = serverSocketChannel.socket(); 
     InetSocketAddress inetSocketAddress =  
       new InetSocketAddress(PORT); 
     serverSocket.bind(inetSocketAddress); 

     selector = Selector.open(); 
     serverSocketChannel.register( 
       selector, SelectionKey.OP_ACCEPT); 

   } catch (IOException e) { 
     System.err.println("Unable to setup environment"); 
     System.exit(-1); 
   } 

   try { 
     while (true) { 

       int count = selector.select(); 

       // nothing to process 
       if (count == 0) { 
         continue; 
       } 

       Set keySet = selector.selectedKeys(); 
       Iterator itor = keySet.iterator(); 

       while (itor.hasNext()) { 
         SelectionKey selectionKey =  
           (SelectionKey) itor.next(); 
         itor.remove(); 

         Socket socket = null; 
         SocketChannel channel = null; 

         if (selectionKey.isAcceptable()) { 
           System.out.println("Got acceptable key"); 
           try { 
             socket = serverSocket.accept(); 
             System.out.println 
                 ("Connection from: " + socket); 
             channel = socket.getChannel(); 
           } catch (IOException e) { 
             System.err.println("Unable to accept channel"); 
             e.printStackTrace(); 
             selectionKey.cancel(); 
           } 

           if (channel != null) { 
             try { 
               System.out.println 
                   ("Watch for something to read"); 
               channel.configureBlocking(false); 
               channel.register 
                   (selector, SelectionKey.OP_READ); 
             } catch (IOException e) { 
               System.err.println("Unable to use channel"); 
               e.printStackTrace(); 
               selectionKey.cancel(); 
             } 
           } 
         } 

         if (selectionKey.isReadable()) { 
           System.out.println("Reading channel"); 
           SocketChannel socketChannel =  
             (SocketChannel) selectionKey.channel(); 
           sharedBuffer.clear(); 

           int bytes = -1; 
           try { 
             while ( 
              (bytes = socketChannel.read(sharedBuffer)) > 0)  
               { 
                 System.out.println("Reading..."); 
                 sharedBuffer.flip(); 

                 while (sharedBuffer.hasRemaining()) { 
                   System.out.println("Exec..."); 
                   //socketChannel.write(sharedBuffer); 
                   Runtime runtime = Runtime.getRuntime(); 
                   Process pc = runtime.exec(?????????????????); 
                 } 
                 sharedBuffer.clear(); 
               } 
           } catch (IOException e) { 
             System.err.println("Error writing back bytes"); 
             e.printStackTrace(); 
             selectionKey.cancel(); 
           } 

           try { 
             System.out.println("Closing..."); 
             socketChannel.close(); 
           } catch (IOException e) { 
             e.printStackTrace(); 
             selectionKey.cancel(); 
           } 
         } 
         System.out.println("Next..."); 
       } 
     } 
   } catch (IOException e) { 
     System.err.println("Error during select()"); 
     e.printStackTrace(); 
   } 
 } 
}
atie의 이미지

http://javaalmanac.com/egs/java.net/ReadFromSocket.html?l=rel

자바 code snippet은 위 사이트에서...

----
I paint objects as I think them, not as I see them.
atie's minipage

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.