1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Socket

Discussão em 'Progress 4GL' iniciado por adautosb, Maio 12, 2009.

  1. adautosb

    adautosb Sem Pontuação

    No modo caracter estou tentando fazer um cliente socket acessando um socket server em Java. Porem por mais incrivel que possa parecer, nao achei nenhum exemplo de codigo cliente no manual da Progress escrevendo algo no server. Somente conectando e recebendo dados.

    Meu problema é: preciso conectar, enviar meus dados e esperar o retorno. Porem somente consigo escrever quando fecho o socket entao nao consigo receber o retorno. Alguem ja fez algo semelhante? Segue meu teste:

    DEFINE VARIABLE mytext AS CHARACTER NO-UNDO.
    DEFINE VARIABLE i AS INTEGER NO-UNDO.
    DEFINE VARIABLE len AS INTEGER NO-UNDO.
    DEFINE VARIABLE mysocket AS HANDLE NO-UNDO.
    DEFINE VARIABLE mymemptr AS MEMPTR NO-UNDO.
    DEFINE VARIABLE ret AS LOGICAL NO-UNDO.

    CREATE SOCKET mysocket.

    ret = mysocket:CONNECT("-H 192.168.155.229 -S 7777").

    IF NOT ret THEN DO:
    MESSAGE "Unable to connect to server" VIEW-AS ALERT-BOX.
    END.

    mytext = "Hello Java".
    len = LENGTH(mytext).
    SET-SIZE(mymemptr) = len.
    SET-BYTE-ORDER(mymemptr) = BIG-ENDIAN.
    PUT-STRING(mymemptr, 1, len) = mytext.
    mysocket:WRITE(mymemptr, 1, GET-SIZE(mymemptr)).
    SET-SIZE(mymemptr) = 0.

    SET-SIZE(mymemptr) = 64.
    mysocket:READ (mymemptr,1,mysocket:GET-BYTES-AVAILABLE()).
    disp GET-STRING(mymemptr,1). /*Unmarshal data*/

    mysocket:DISCONNECT().
    DELETE OBJECT mysocket.


    Muito obrigado.
  2. sl4v3r

    sl4v3r Membro Participativo

    Ola,

    Talvez esse link te ajude... http://www.oehive.org/node/1205

    Só uma dica... quando for postar codigos aqui no forum utilize a tag Code.

    Sem a tag code
    DEFINE VARIABLE mytext AS CHARACTER NO-UNDO.

    Com a tag code
    Código:
    DEFINE VARIABLE mytext AS CHARACTER NO-UNDO.
  3. adautosb

    adautosb Sem Pontuação

    Olá sl4v3r,

    obrigado pela dica porem o exemplo no qual voce me passou é orientado a objetos e como nao domino o progress para mim ficou bem complicado. Mas obrigadao.

    Porem consegui resolver meu problema :mrgreen:

    Pelos meus testes o progress somente envia (sem fechar o socket) quando voce adiciona os caracteres "~r~n" ao final.

    Por exemplo:

    Código:
        ASSIGN mensagem = "Hello Java~r~n".
        len = LENGTH(mensagem).
    
        SET-SIZE(mData) = 0.
        SET-SIZE(mData) = len + 1.
        PUT-STRING(mData,1) = mensagem.
    
        lRC = hSocket:WRITE(mData,1,GET-SIZE(mData)) NO-ERROR.
    
    Fiz um programinha completinho, "vai e volta" com progress e java. Se alguem precisar um dia pode mandar um email para adautosb@hotmail.com que disponibilizado ok?!

    Obrigado.

Compartilhe esta Página