请问能够用oracle中的utl_tcp包中的函数或过程,去监听一个指定的ip和端口,并获取从该端口中得到的内容信息吗?
如果能够这样的话,请给我一个小的例子。谢谢!

解决方案 »

  1.   

    The following code example illustrates how the TCP/IP package can be used to retrieve a Web page over HTTP. It connects to a Web server listening at port 80 (standard port for HTTP) and requests the root document.DECLARE
      c  utl_tcp.connection;  -- TCP/IP connection to the Web server
      ret_val pls_integer; 
    BEGIN
      c := utl_tcp.open_connection(remote_host => `www.acme.com',
                                   remote_port =>  80,
                                   charset     => 'US7ASCII');  -- open connection
      ret_val := utl_tcp.write_line(c, `GET / HTTP/1.0');    -- send HTTP request
      ret_val := utl_tcp.write_line(c);
      BEGIN
        LOOP
          dbms_output.put_line(utl_tcp.get_line(c, TRUE));  -- read result
        END LOOP;
      EXCEPTION
        WHEN utl_tcp.end_of_input THEN
          NULL; -- end of input
      END;
      utl_tcp.close_connection(c);
    END;
      

  2.   

    请问如果我用test_utl_tcp_write_proc过程向指定的ip和端口写入内容信息,能够用test_tcp_read_proc过程读取出前面方法写入的内容吗?过程test_utl_tcp_write_proc:
    create or replace
    PROCEDURE test_utl_tcp_write_proc
    AS
      v_conn UTL_TCP.CONNECTION;
      v_write_num BINARY_INTEGER := 0;
      v_str    VARCHAR2 (4000);
      v_result VARCHAR2 (100);
    BEGIN
      v_conn := utl_tcp.open_connection( '127.0.0.1 ', 8080);
      --v_write_num向端口中写如数据的长度
      LOOP
        v_write_num := utl_tcp.write_text ( v_conn, 'hello world!');
        dbms_output.put_line('Content Len is '||v_write_num);
      END LOOP;
      utl_tcp.flush( v_conn);
      utl_tcp.close_connection ( v_conn);
    EXCEPTION
    WHEN OTHERS THEN
      utl_tcp.flush( v_conn);
      utl_tcp.close_connection (v_conn);
    END test_utl_tcp_write_proc;过程test_tcp_read_proc:
    create or replace
    PROCEDURE test_tcp_read_proc
    AS
      v_conn UTL_TCP.CONNECTION;
      v_len  NUMBER := 0;
      v_data VARCHAR2(512);
    BEGIN
      v_conn := utl_tcp.open_connection('127.0.0.1',8080);
      LOOP
        IF(utl_tcp.available(v_conn) > 0) THEN
          v_len  := utl_tcp.read_text(v_conn, v_data,512);
          dbms_output.put_line('Content is '||v_data||' Len is '|| v_len );
        ELSE
          dbms_output.put_line('Waiting...');
        END IF;
      END LOOP;
    EXCEPTION
    WHEN OTHERS THEN
      utl_tcp.close_connection(v_conn);
    END test_tcp_read_proc;
    谢谢welyngj的回答。
      

  3.   

    好像utl_tcp包中没有函数有监听的功能吧?