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;
请问如果我用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的回答。
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;
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的回答。