cap24redes-deitel.pdf

Upload: pitman123

Post on 31-Oct-2015

79 views

Category:

Documents


0 download

TRANSCRIPT

  • 12424

    2005 by Pearson Education do Brasil

    Redes

  • 2OBJETIVOS Neste captulo, voc aprender: Como entender a tecnologia de redes do Java com

    URLs, sockets e datagramas. Como implementar aplicativos de rede de Java

    utilizando sockets e datagramas. Como implementar clientes e servidores Java que se

    2005 by Pearson Education do Brasil

    Como implementar clientes e servidores Java que se comunicam entre si.

    Como implementar aplicativos colaborativos baseados em rede.

    Como construir um servidor multiencadeado.

  • 324.1 Introduo24.2 Manipulando URLs24.3 Lendo um arquivo em um servidor Web24.4 Estabelecendo um servidor simples utilizando sockets de fluxo24.5 Estabelecendo um cliente simples utilizando sockets de fluxo24.6 Interao cliente/servidor com conexes de socket de fluxo24.7 Interao cliente/servidor sem conexo com datagramas24.8 Jogo-da-velha cliente/servidor que utiliza um servidor com

    multithread

    2005 by Pearson Education do Brasil

    multithread24.9 Segurana e redes24.10 Estudo de caso: Servidor e cliente DeitelMessengerDeitelMessengerDeitelMessengerDeitelMessenger

    24.10.1 DeitelMessengerServerDeitelMessengerServerDeitelMessengerServerDeitelMessengerServer e classes de suporte24.10.2 Cliente DeitelMessengerDeitelMessengerDeitelMessengerDeitelMessenger e classes de suporte

    24.11 Concluso

  • 424.1 Introduo

    O pacote de rede o java.netjava.netjava.netjava.net: Comunicaes baseadas em fluxo:

    Os aplicativos visualizam a rede como fluxos de dados. Protocolo baseado em conexo. Utilizam o popular TCP (Transmission Control Protocol).

    2005 by Pearson Education do Brasil

    Comunicaes baseadas em pacotes: Transmitem pacotes individuais de informaes. Utilizam UDP (User Datagram Protocol) que um servio

    sem conexo.

  • 524.1 Introduo (Continuao) Relacionamento cliente-servidor:

    O cliente solicita alguma ao a ser realizada. O servidor realiza a ao e responde ao cliente. Modelo de solicitao-resposta:

    Implementao comum: Navegadores Web e servidores Web.

    2005 by Pearson Education do Brasil

    Implementao comum: Navegadores Web e servidores Web.

  • 6Dica de desempenho 24.1

    Servios sem conexo geralmente oferecem desempenho maior, mas menos confiabilidade do que os servios orientados a conexo.

    2005 by Pearson Education do Brasil

  • 7O TCP, o UDP e os protocolos relacionados permitem que uma grande variedade de sistemas de computadores heterogneos (isto , sistemas de computadores com

    Dica de portabilidade 24.1

    2005 by Pearson Education do Brasil

    (isto , sistemas de computadores com diferentes processadores e diferentes sistemas operacionais) se intercomuniquem.

  • 824.2 Manipulando URLs

    Hypertext Transfer Protocol (HTTP): Utiliza URIs (Uniform Resource Identifier) para

    identificar os dados. URLs (Uniform Resource Locators):

    URIs que especificam as localizaes dos documentos.

    2005 by Pearson Education do Brasil

    Referenciam arquivos, diretrios e objetos complexos. Documento HTML SiteSelector.htmlSiteSelector.htmlSiteSelector.htmlSiteSelector.html

    (Figura 24.1): Elemento appletappletappletapplet. Tag paramparamparamparam:

    Atributo namenamenamename. Atributo valuevaluevaluevalue.

  • 9SiteSelector.htmlSiteSelector.htmlSiteSelector.htmlSiteSelector.html

    Linhas 5-12

    Resumo 1 2 Site SelectorSite SelectorSite SelectorSite Selector 3 4 5 6 7 8 9 10 11 12 13 14 15

    Declara tags parampara a applet; cada parmetro tem um name e um value

    2005 by Pearson Education do Brasil

    Figura 24.1 | O documento HTML para carregar a applet SiteSelectorSiteSelectorSiteSelectorSiteSelector.

  • 10

    Resumo 1 // Fig. 24.2: SiteSelector.java// Fig. 24.2: SiteSelector.java// Fig. 24.2: SiteSelector.java// Fig. 24.2: SiteSelector.java 2 // // // // Esse programa carrega um documento de um URLEsse programa carrega um documento de um URLEsse programa carrega um documento de um URLEsse programa carrega um documento de um URL.... 3 importimportimportimport java.net.MalformedURLException; java.net.MalformedURLException; java.net.MalformedURLException; java.net.MalformedURLException; 4 importimportimportimport java.net.URL; java.net.URL; java.net.URL; java.net.URL; 5 importimportimportimport java.util.HashMap; java.util.HashMap; java.util.HashMap; java.util.HashMap; 6 importimportimportimport java.util.ArrayList; java.util.ArrayList; java.util.ArrayList; java.util.ArrayList; 7 impimpimpimportortortort java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; 8 importimportimportimport java.applet.AppletContext; java.applet.AppletContext; java.applet.AppletContext; java.applet.AppletContext; 9 importimportimportimport javax.swing.JApplet; javax.swing.JApplet; javax.swing.JApplet; javax.swing.JApplet; 10 importimportimportimport javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; javax.swing.JLabel; 11 importimportimportimport javax.swing.JList; javax.swing.JList; javax.swing.JList; javax.swing.JList; 12 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; 13 importimportimportimport javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionEvent; javax.swing.event.ListSelectionEvent; 14 importimportimportimport javax.swing.event.ListSelectionListener; javax.swing.event.ListSelectionListener; javax.swing.event.ListSelectionListener; javax.swing.event.ListSelectionListener; 15

    16 publicpublicpublicpublic classclassclassclass SiteSelector SiteSelector SiteSelector SiteSelector extendsextendsextendsextends JApplet JApplet JApplet JApplet 17 {{{{

    SiteSelector.javaSiteSelector.javaSiteSelector.javaSiteSelector.java

    (1 de 5)

    Linhas 3-4

    Linha 8

    Importa classes no pacote java.net

    Importa a interface AppletContext do pacote

    java.net

    2005 by Pearson Education do Brasil

    17 {{{{ 18 privateprivateprivateprivate HashMap< Object, URL > sites; HashMap< Object, URL > sites; HashMap< Object, URL > sites; HashMap< Object, URL > sites; // // // // nomes e URLs de sitenomes e URLs de sitenomes e URLs de sitenomes e URLs de site 19 privateprivateprivateprivate ArrayList< String > siteNames; ArrayList< String > siteNames; ArrayList< String > siteNames; ArrayList< String > siteNames; // // // // nomes de site nomes de site nomes de site nomes de site 20 privateprivateprivateprivate JList siteChooser; JList siteChooser; JList siteChooser; JList siteChooser; // list// list// list// listaaaa de de de de sites sites sites sites a escolhera escolhera escolhera escolher 21

    22 // // // // l parmetros de HTML e configura a GUIl parmetros de HTML e configura a GUIl parmetros de HTML e configura a GUIl parmetros de HTML e configura a GUI 23 publicpublicpublicpublic voidvoidvoidvoid init() init() init() init() 24 { { { { 25 sites = sites = sites = sites = newnewnewnew HashMap< Object, URL >(); HashMap< Object, URL >(); HashMap< Object, URL >(); HashMap< Object, URL >(); // cr// cr// cr// criaiaiaia HashMap HashMap HashMap HashMap 26 siteNames = siteNames = siteNames = siteNames = newnewnewnew ArrayList< ArrayList< ArrayList< ArrayList< String >(); String >(); String >(); String >(); // cr// cr// cr// criaiaiaia ArrayList ArrayList ArrayList ArrayList 27

    28 // obt // obt // obt // obtmmmm par par par parmetrosmetrosmetrosmetros do documento do documento do documento do documento HTMLHTMLHTMLHTML 29 getSitesFromHTMLParameters(); getSitesFromHTMLParameters(); getSitesFromHTMLParameters(); getSitesFromHTMLParameters(); 30

  • 11

    Resumo31 // // // // cria componentes GUI e interface de layoutcria componentes GUI e interface de layoutcria componentes GUI e interface de layoutcria componentes GUI e interface de layout 32 add( add( add( add( newnewnewnew JLabel( JLabel( JLabel( JLabel( "Choose a site to browse""Choose a site to browse""Choose a site to browse""Choose a site to browse" ), ), ), ), BorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTH ); ); ); ); 33

    34 siteChooser = siteChooser = siteChooser = siteChooser = newnewnewnew JList( siteNames.toArray() ); JList( siteNames.toArray() ); JList( siteNames.toArray() ); JList( siteNames.toArray() ); // p// p// p// preenchereenchereenchereenche JList JList JList JList 35 siteChooser.addListSelectio siteChooser.addListSelectio siteChooser.addListSelectio siteChooser.addListSelectionListener(nListener(nListener(nListener( 36 newnewnewnew ListSelectionListener() ListSelectionListener() ListSelectionListener() ListSelectionListener() // // // // classe interna aclasse interna aclasse interna aclasse interna annnnnimanimanimanima 37 { { { { 38 // // // // vai ao site selecionado pelo usuriovai ao site selecionado pelo usuriovai ao site selecionado pelo usuriovai ao site selecionado pelo usurio 39 publicpublicpublicpublic voidvoidvoidvoid valueChanged( ListSelectionEvent event ) valueChanged( ListSelectionEvent event ) valueChanged( ListSelectionEvent event ) valueChanged( ListSelectionEvent event ) 40 { { { { 41 // // // // obtm o nome do site selecionadoobtm o nome do site selecionadoobtm o nome do site selecionadoobtm o nome do site selecionado 42 Object object = siteChooser.getSelectedValue(); Object object = siteChooser.getSelectedValue(); Object object = siteChooser.getSelectedValue(); Object object = siteChooser.getSelectedValue(); 43

    44 // // // // utiliza o nome do site para localizar o URL correspondenteutiliza o nome do site para localizar o URL correspondenteutiliza o nome do site para localizar o URL correspondenteutiliza o nome do site para localizar o URL correspondente 45 URL newDocument = sites.get( object ); URL newDocument = sites.get( object ); URL newDocument = sites.get( object ); URL newDocument = sites.get( object ); 46

    47 // // // // obtm continer de obtm continer de obtm continer de obtm continer de appleappleappleappletstststs

    SiteSelector.javaSiteSelector.javaSiteSelector.javaSiteSelector.java

    (2 de 5)

    Linhas 39-52

    Linha 45

    Linha 48

    Linha 51

    Quando o usurio seleciona um dos sites Web listados no siteChooser, o

    programa chama o mtodo valueChanged

    Passa o nome do site selecionado (a chave) para o mtodo Hashtable

    2005 by Pearson Education do Brasil

    47 // // // // obtm continer de obtm continer de obtm continer de obtm continer de appleappleappleappletstststs 48 AppletContext browser = getAppletContext();AppletContext browser = getAppletContext();AppletContext browser = getAppletContext();AppletContext browser = getAppletContext(); 49

    50 // // // // instrui o continer de applets a mudar as pginasinstrui o continer de applets a mudar as pginasinstrui o continer de applets a mudar as pginasinstrui o continer de applets a mudar as pginas 51 browser.shobrowser.shobrowser.shobrowser.showDocument( newDocument ); wDocument( newDocument ); wDocument( newDocument ); wDocument( newDocument ); 52 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo valueChangedvalueChangedvalueChangedvalueChanged 53 } } } } // // // // fim da classe interna annimafim da classe interna annimafim da classe interna annimafim da classe interna annima 54 ); ); ); ); // // // // fim da chamada para addListSelectionListenerfim da chamada para addListSelectionListenerfim da chamada para addListSelectionListenerfim da chamada para addListSelectionListener 55

    56 add( add( add( add( newnewnewnew JScrollPane( siteChooser ), JScrollPane( siteChooser ), JScrollPane( siteChooser ), JScrollPane( siteChooser ), BorderLayoutBorderLayoutBorderLayoutBorderLayout.CENTER.CENTER.CENTER.CENTER ); ); ); ); 57 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo initinitinitinit 58

    Linha 51get, que localiza e retorna uma referncia de URL correspondente (o

    valor).Obtm uma referncia a um

    objeto AppletContext que representa o continer de

    appletsExibe na janela atual do navegador o recurso associado com o URL

    newDocument

  • 12

    Resumo59 // // // // obtm parmetros do documento HTMLobtm parmetros do documento HTMLobtm parmetros do documento HTMLobtm parmetros do documento HTML 60 privateprivateprivateprivate voidvoidvoidvoid getSitesFromHTMLParameters() getSitesFromHTMLParameters() getSitesFromHTMLParameters() getSitesFromHTMLParameters() 61 { { { { 62 String title; String title; String title; String title; // // // // ttulo do sitettulo do sitettulo do sitettulo do site 63 String location; String location; String location; String location; // // // // localizao do sitelocalizao do sitelocalizao do sitelocalizao do site 64 URL url; URL url; URL url; URL url; // // // // URL da localizaoURL da localizaoURL da localizaoURL da localizao 65 intintintint counter = counter = counter = counter = 0000; ; ; ; // // // // conta nmero de sitesconta nmero de sitesconta nmero de sitesconta nmero de sites 66

    67 title = getParameter( title = getParameter( title = getParameter( title = getParameter( "title""title""title""title" + counter ); + counter ); + counter ); + counter ); // // // // obtm o primeiro ttulo do siteobtm o primeiro ttulo do siteobtm o primeiro ttulo do siteobtm o primeiro ttulo do site 68

    69 // // // // faz um loop at no haja mais parmetros no documento HTMLfaz um loop at no haja mais parmetros no documento HTMLfaz um loop at no haja mais parmetros no documento HTMLfaz um loop at no haja mais parmetros no documento HTML 70 whilewhilewhilewhile ( title != ( title != ( title != ( title != nullnullnullnull ) ) ) ) 71 { { { { 72 // // // // obtm a localizao do siteobtm a localizao do siteobtm a localizao do siteobtm a localizao do site 73 location = getParameter( location = getParameter( location = getParameter( location = getParameter( "location" "location" "location" "location" + counter );+ counter );+ counter );+ counter ); 74 75 trytrytrytry // // // // coloca ttulo/URL no HashMap e ttulo na ArrayListcoloca ttulo/URL no HashMap e ttulo na ArrayListcoloca ttulo/URL no HashMap e ttulo na ArrayListcoloca ttulo/URL no HashMap e ttulo na ArrayList

    SiteSelector.javaSiteSelector.javaSiteSelector.javaSiteSelector.java

    (3 de 5)

    Linha 67

    Linha 73

    Linha 77

    Linhas 81-84

    Utiliza o mtodo AppletgetParameter para obter o ttulo do

    site Web Utiliza o mtodo AppletgetParameter para

    2005 by Pearson Education do Brasil

    75 trytrytrytry // // // // coloca ttulo/URL no HashMap e ttulo na ArrayListcoloca ttulo/URL no HashMap e ttulo na ArrayListcoloca ttulo/URL no HashMap e ttulo na ArrayListcoloca ttulo/URL no HashMap e ttulo na ArrayList 76 { { { { 77 url = url = url = url = newnewnewnew URL( locat URL( locat URL( locat URL( location ); ion ); ion ); ion ); // // // // converte a localizao em URLconverte a localizao em URLconverte a localizao em URLconverte a localizao em URL 78 sites.put( title, url ); sites.put( title, url ); sites.put( title, url ); sites.put( title, url ); // // // // coloca ttulo/URL no HashMapcoloca ttulo/URL no HashMapcoloca ttulo/URL no HashMapcoloca ttulo/URL no HashMap 79 siteNames.add( title ); siteNames.add( title ); siteNames.add( title ); siteNames.add( title ); // // // // coloca o ttulo na ArrayListcoloca o ttulo na ArrayListcoloca o ttulo na ArrayListcoloca o ttulo na ArrayList 80 } } } } // // // // fim dofim dofim dofim do try try try try 81 catchcatchcatchcatch ( MalformedURLE ( MalformedURLE ( MalformedURLE ( MalformedURLException urlException ) xception urlException ) xception urlException ) xception urlException ) 82 { { { { 83 urlException.printStackTrace(); urlException.printStackTrace(); urlException.printStackTrace(); urlException.printStackTrace(); 84 } } } } // // // // fim dofim dofim dofim do catch catch catch catch 85

    Linhas 81-84obter a localizao do site

    WebUtiliza a location como o valor de um novo objeto

    URL

    Se a location passada para o construtor de IURL for invlida, o construtor de URL lanar uma MalformedURLException

  • 13

    Resumo86 counter++; counter++; counter++; counter++; 87 title = getParameter( title = getParameter( title = getParameter( title = getParameter( "title""title""title""title" + counter ); + counter ); + counter ); + counter ); // // // // obtm o prximo ttulo do siteobtm o prximo ttulo do siteobtm o prximo ttulo do siteobtm o prximo ttulo do site 88 } } } } // // // // fim dofim dofim dofim do while while while while 89 } } } } // // // // fim do mtodofim do mtodofim do mtodofim do mtodo getSitesFromHTMLParameters getSitesFromHTMLParameters getSitesFromHTMLParameters getSitesFromHTMLParameters 90 } } } } // // // // fim da fim da fim da fim da classclassclassclasseeee SiteSelector SiteSelector SiteSelector SiteSelector

    SiteSelector.javaSiteSelector.javaSiteSelector.javaSiteSelector.java

    (4 de 5)

    Linha 87

    Sada do programa

    Utiliza o mtodo AppletgetParameter para obter o ttulo do

    prximo site

    2005 by Pearson Education do Brasil

  • 14

    Resumo

    SiteSelector.javaSiteSelector.javaSiteSelector.javaSiteSelector.java

    (5 de 5)

    Sada do programa

    2005 by Pearson Education do Brasil

  • 15

    24.2 Manipulando URLs (Continuao)

    Frames HTML: Especifica o frame-alvo no mtodo showDocumentshowDocumentshowDocumentshowDocument:

    _blank_blank_blank_blank

    _self_self_self_self

    _top_top_top_top

    2005 by Pearson Education do Brasil

  • 16

    Dica de preveno de erro 24.1A applet na Figura 24.2 deve ser executada a partir de um navegador Web, como o Mozilla ou o Microsoft Internet Explorer, para ver os resultados da exibio de uma outra pgina da Web. O appletviewerappletviewerappletviewerappletviewer s capaz de executar

    2005 by Pearson Education do Brasil

    Web. O appletviewerappletviewerappletviewerappletviewer s capaz de executar applets ele ignora todas as outras tags HTML. Se os sites Web no programa contiverem applets Java, somente essas applets aparecero no appletviewerappletviewerappletviewerappletviewer quando o usurio selecionar um site Web. Cada applet executaria em uma janela appletviewerappletviewerappletviewerappletviewer separada.

  • 17

    24.3 Lendo um arquivo em um servidor Web

    Componente GUI Swing JEditorPaneJEditorPaneJEditorPaneJEditorPane: Renderiza tanto texto simples como texto formatado em

    HTML. Atua como um navegador Web simples.

    Recupera arquivos de um servidor Web em um dado URI.

    2005 by Pearson Education do Brasil

    HyperlinkEventHyperlinkEventHyperlinkEventHyperlinkEvents:

    Ocorrem quando o usurio clica em um hyperlink. Trs tipos de eventos:

    HyperlinkEvent.EventType.ACTIVATEDHyperlinkEvent.EventType.ACTIVATEDHyperlinkEvent.EventType.ACTIVATEDHyperlinkEvent.EventType.ACTIVATED

    HyperlinkEvent.EventType.ENTEREDHyperlinkEvent.EventType.ENTEREDHyperlinkEvent.EventType.ENTEREDHyperlinkEvent.EventType.ENTERED

    HyperlinkEvent.EventType.EXITEDHyperlinkEvent.EventType.EXITEDHyperlinkEvent.EventType.EXITEDHyperlinkEvent.EventType.EXITED

  • 18

    Resumo 1 // Fig. 24.3: ReadServerFile.java// Fig. 24.3: ReadServerFile.java// Fig. 24.3: ReadServerFile.java// Fig. 24.3: ReadServerFile.java 2 // // // // UUUUsasasasa um JEditorPane para exibir o contedo de um arquivo em um servidor Web um JEditorPane para exibir o contedo de um arquivo em um servidor Web um JEditorPane para exibir o contedo de um arquivo em um servidor Web um JEditorPane para exibir o contedo de um arquivo em um servidor Web.... 3 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; 4 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; 5 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; 6 importimportimportimport java.io.IO java.io.IO java.io.IO java.io.IOException;Exception;Exception;Exception; 7 importimportimportimport javax.swing.JEditorPane; javax.swing.JEditorPane; javax.swing.JEditorPane; javax.swing.JEditorPane; 8 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; 9 importimportimportimport javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane; javax.swing.JOptionPane; 10 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; 11 importimportimportimport javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; 12 importimportimportimport javax.swing.event.HyperlinkEvent; javax.swing.event.HyperlinkEvent; javax.swing.event.HyperlinkEvent; javax.swing.event.HyperlinkEvent; 13 importimportimportimport javax.sw javax.sw javax.sw javax.swing.event.HyperlinkListener;ing.event.HyperlinkListener;ing.event.HyperlinkListener;ing.event.HyperlinkListener; 14

    15 publicpublicpublicpublic classclassclassclass ReadServerFile ReadServerFile ReadServerFile ReadServerFile extendsextendsextendsextends JFrame JFrame JFrame JFrame 16 {{{{ 17 privateprivateprivateprivate JTextField enterField; JTextField enterField; JTextField enterField; JTextField enterField; // JTextField // JTextField // JTextField // JTextField para inserir nome dopara inserir nome dopara inserir nome dopara inserir nome do site site site site

    ReadServerFileReadServerFileReadServerFileReadServerFile.java.java.java.java

    (1 de 3)

    Linhas 7, 12 e 13

    Linha 18

    Importa JEditPane do pacote javax.swing, importa HyperlinkEvent

    e HyperlinkListener do pacote javax.swing.event

    2005 by Pearson Education do Brasil

    17 privateprivateprivateprivate JTextField enterField; JTextField enterField; JTextField enterField; JTextField enterField; // JTextField // JTextField // JTextField // JTextField para inserir nome dopara inserir nome dopara inserir nome dopara inserir nome do site site site site 18 privateprivateprivateprivate JEditorPane contentsArea; JEditorPane contentsArea; JEditorPane contentsArea; JEditorPane contentsArea; // // // // para exibir site da para exibir site da para exibir site da para exibir site da WebWebWebWeb 19

    20 // // // // configura a configura a configura a configura a GUIGUIGUIGUI 21 publicpublicpublicpublic ReadServerFile() ReadServerFile() ReadServerFile() ReadServerFile() 22 { { { { 23 supersupersupersuper( ( ( ( "Simple Web Browser""Simple Web Browser""Simple Web Browser""Simple Web Browser" ); ); ); ); 24

    Declara o JEditorPanecontentsArea, que ser

    utilizado para exibir o contedo do arquivo

  • 19

    Resumo25 // // // // cria o enterField e registra seu ouvintecria o enterField e registra seu ouvintecria o enterField e registra seu ouvintecria o enterField e registra seu ouvinte 26 enterField = enterField = enterField = enterField = newnewnewnew JTextField( JTextField( JTextField( JTextField( "Enter file URL here""Enter file URL here""Enter file URL here""Enter file URL here" ); ); ); ); 27 enterField.addActionListener( enterField.addActionListener( enterField.addActionListener( enterField.addActionListener( 28 newnewnewnew ActionListener() ActionListener() ActionListener() ActionListener() 29 { { { { 30 // // // // obtm o documento especiobtm o documento especiobtm o documento especiobtm o documento especificado pelo usurioficado pelo usurioficado pelo usurioficado pelo usurio 31 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) 32 { { { { 33 getThePage( event.getActionCommand() ); getThePage( event.getActionCommand() ); getThePage( event.getActionCommand() ); getThePage( event.getActionCommand() ); 34 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo actionPerformedactionPerformedactionPerformedactionPerformed 35 } } } } // // // // fim da classe internfim da classe internfim da classe internfim da classe internaaaa 36 ); ); ); ); // // // // fim da chamada para fim da chamada para fim da chamada para fim da chamada para addActionListeneraddActionListeneraddActionListeneraddActionListener 37

    38 add( enterField, add( enterField, add( enterField, add( enterField, BorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTH ); ); ); ); 39

    40 contentsArea = contentsArea = contentsArea = contentsArea = newnewnewnew JEditorPane(); JEditorPane(); JEditorPane(); JEditorPane(); // cr// cr// cr// criaiaiaia contentsArea contentsArea contentsArea contentsArea 41 contentsArea.setEditable( contentsArea.setEditable( contentsArea.setEditable( contentsArea.setEditable( falsefalsefalsefalse ); ); ); );

    ReadServerFileReadServerFileReadServerFileReadServerFile.java.java.java.java

    (2 de 3)

    Linha 40

    Linha 41

    Linhas 42-53Cria um

    JEditorPaneConfigura a propriedade editvel Registra um

    2005 by Pearson Education do Brasil

    41 contentsArea.setEditable( contentsArea.setEditable( contentsArea.setEditable( contentsArea.setEditable( falsefalsefalsefalse ); ); ); ); 42 contentsArea.addHyperlinkListener( contentsArea.addHyperlinkListener( contentsArea.addHyperlinkListener( contentsArea.addHyperlinkListener( 43 newnewnewnew HyperlinkListener() HyperlinkListener() HyperlinkListener() HyperlinkListener() 44 { { { { 45 // // // // se usurio clicse usurio clicse usurio clicse usurio clicouououou no no no no hyperlinkhyperlinkhyperlinkhyperlink, , , , vai para a pginavai para a pginavai para a pginavai para a pgina esesesespecifpecifpecifpecificadaicadaicadaicada 46 publicpublicpublicpublic voidvoidvoidvoid hyperlinkUpdate( HyperlinkEvent event ) hyperlinkUpdate( HyperlinkEvent event ) hyperlinkUpdate( HyperlinkEvent event ) hyperlinkUpdate( HyperlinkEvent event ) 47 {{{{ 48 ifififif ( event.getEventType() == ( event.getEventType() == ( event.getEventType() == ( event.getEventType() == 49 HyperlinkEvent.EventType.ACTIVATEDHyperlinkEvent.EventType.ACTIVATEDHyperlinkEvent.EventType.ACTIVATEDHyperlinkEvent.EventType.ACTIVATED ) ) ) ) 50 getThePage( event.getURL().toString() ); getThePage( event.getURL().toString() ); getThePage( event.getURL().toString() ); getThePage( event.getURL().toString() ); 51 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo hyperlinkUpdate hyperlinkUpdate hyperlinkUpdate hyperlinkUpdate 52 }}}} // // // // fim da classe internafim da classe internafim da classe internafim da classe interna 53 ); ); ); ); // // // // fim da chamada para fim da chamada para fim da chamada para fim da chamada para addHyperlinkListener addHyperlinkListener addHyperlinkListener addHyperlinkListener 54

    Linhas 46-51

    Linhas 48-49

    Linha 50

    utilizando o construtor sem argumento

    editvel JEditorPanecomo false

    Registra um HyperlinkListener para tratar HyperlinkEvents que ocorrem

    quando o usurio clica em um hyperlink no JEditorPane

    O mtodo hyperlinkUpdate

    chamado quando um HyperlinkEvent ocorre

    Utiliza o mtodo HyperlinkEventgetEventType para

    determinar o tipo do HyperlinkEventUtiliza o mtodo HyperlinkEvent getURLpara obter o URL representado

    pelo hyperlink.

  • 20

    Resumo55 add( add( add( add( newnewnewnew JScrollPane( contentsArea ), JScrollPane( contentsArea ), JScrollPane( contentsArea ), JScrollPane( contentsArea ), BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ); ); ); ); 56 setSize( setSize( setSize( setSize( 400400400400, , , , 300300300300 ); ); ); ); // // // // configura o tamanho da janelaconfigura o tamanho da janelaconfigura o tamanho da janelaconfigura o tamanho da janela 57 setVisible( setVisible( setVisible( setVisible( truetruetruetrue ); ); ); ); // // // // mostra a janelamostra a janelamostra a janelamostra a janela 58 } } } } // // // // fim do construtorfim do construtorfim do construtorfim do construtor ReadServerFile ReadServerFile ReadServerFile ReadServerFile 59

    60 // // // // carregacarregacarregacarrega o o o o documentdocumentdocumentdocumentoooo 61 privateprivateprivateprivate voidvoidvoidvoid getThePage( String location ) getThePage( String location ) getThePage( String location ) getThePage( String location ) 62 { { { { 63 trytrytrytry // // // // carrega ocarrega ocarrega ocarrega o document document document documento e exibe a localizao e exibe a localizao e exibe a localizao e exibe a localizaoooo 64 { { { { 65 contentsArea.setPage( location );contentsArea.setPage( location );contentsArea.setPage( location );contentsArea.setPage( location ); // // // // configura a pginaconfigura a pginaconfigura a pginaconfigura a pgina 66 enterField.setText( loca enterField.setText( loca enterField.setText( loca enterField.setText( location ); tion ); tion ); tion ); // // // // configura o textoconfigura o textoconfigura o textoconfigura o texto 67 } } } } // // // // fim do fim do fim do fim do trytrytrytry 68 catchcatchcatchcatch ( IOException ioException ) ( IOException ioException ) ( IOException ioException ) ( IOException ioException ) 69 { { { { 70 JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( JOptionPane.showMessageDialog( thisthisthisthis,,,, 71 "Error retrieving specified URL""Error retrieving specified URL""Error retrieving specified URL""Error retrieving specified URL", , , , "Bad URL""Bad URL""Bad URL""Bad URL", , , ,

    ReadServerFileReadServerFileReadServerFileReadServerFile.java.java.java.java

    (3 de 3)

    Linha 65Invoca o mtodo

    JEditorPane setPagepara fazer o download do

    documento especificado por location e exibi-lo no

    JEditPane

    2005 by Pearson Education do Brasil

    71 "Error retrieving specified URL""Error retrieving specified URL""Error retrieving specified URL""Error retrieving specified URL", , , , "Bad URL""Bad URL""Bad URL""Bad URL", , , , 72 JOptionPanJOptionPanJOptionPanJOptionPane.ERROR_MESSAGEe.ERROR_MESSAGEe.ERROR_MESSAGEe.ERROR_MESSAGE ); ); ); ); 73 } } } } // // // // fim dofim dofim dofim do catch catch catch catch 74 } } } } // // // // fim do mtodofim do mtodofim do mtodofim do mtodo getThePage getThePage getThePage getThePage 75 } } } } // // // // fim da fim da fim da fim da classclassclassclasseeee ReadServerFile ReadServerFile ReadServerFile ReadServerFile

  • 21

    Resumo 1 // Fig. 24.4: ReadServerFileTest.java// Fig. 24.4: ReadServerFileTest.java// Fig. 24.4: ReadServerFileTest.java// Fig. 24.4: ReadServerFileTest.java 2 // Cr// Cr// Cr// Criiiia e inicia a e inicia a e inicia a e inicia umumumum ReadServerFile. ReadServerFile. ReadServerFile. ReadServerFile. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; 4

    5 publicpublicpublicpublic classclassclassclass ReadServerFileTest ReadServerFileTest ReadServerFileTest ReadServerFileTest 6 {{{{ 7 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] ) 8 { { { { 9 ReadServerFile application = ReadServerFile application = ReadServerFile application = ReadServerFile application = newnewnewnew ReadServerFile(); ReadServerFile(); ReadServerFile(); ReadServerFile(); 10 application.setDefaultCloseOperation( application.setDefaultCloseOperation( application.setDefaultCloseOperation( application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); ); 11 } } } } // // // // ffffim do im do im do im do mainmainmainmain 12 } } } } // // // // ffffim da im da im da im da classclassclassclasseeee ReadServerFileTest ReadServerFileTest ReadServerFileTest ReadServerFileTest

    ReadServerFileTestReadServerFileTestReadServerFileTestReadServerFileTest.java.java.java.java

    (1 de 2)

    Sada do programa

    2005 by Pearson Education do Brasil

  • 22

    Resumo

    ReadServerFileTestReadServerFileTestReadServerFileTestReadServerFileTest.java.java.java.java

    (2 de 2)

    Sada do programa

    2005 by Pearson Education do Brasil

  • 23

    Um JEditorPaneJEditorPaneJEditorPaneJEditorPane gera HyperlinkEventsHyperlinkEventsHyperlinkEventsHyperlinkEventssomente se eles forem no-editveis.

    Observao sobre aparncia e comportamento 24.1

    2005 by Pearson Education do Brasil

  • 24

    24.4 Estabelecendo um servidor simples utilizando sockets de fluxo

    Cinco passos para criar um servidor simples em Java:

    Passo 1: Criar o objeto ServerSocketServerSocketServerSocketServerSocket: ServerSocket serverServerSocket serverServerSocket serverServerSocket server ==== newnewnewnew ServerSocketServerSocketServerSocketServerSocket( ( ( ( nmeroDaPortanmeroDaPortanmeroDaPortanmeroDaPorta,,,, comprimentoDaFilacomprimentoDaFilacomprimentoDaFilacomprimentoDaFila ););););

    2005 by Pearson Education do Brasil

    Registra uma porta disponvel. Especifica um nmero mximo de clientes. Ponto de handshake. Vincula o servidor a uma porta. Somente um cliente pode ser vinculado a uma porta

    especfica.

  • 25

    Observao de engenharia de software 24.1

    Os nmeros de porta podem estar entre 0 e 65.535. A maioria dos sistemas operacionais reserva nmeros de porta abaixo de 1.024 para servios de sistema (por exemplo, correio eletrnico e servidores da World Wide Web).

    2005 by Pearson Education do Brasil

    eletrnico e servidores da World Wide Web).Geralmente, essas portas no devem ser especificadas como portas de conexo nos programas de usurio. De fato, alguns sistemas operacionais requerem privilgios especiais de acesso para que possam ser vinculados a nmeros de porta abaixo de 1.024.

  • 26

    24.4 Estabelecendo um servidor simples utilizando sockets de fluxo (Continuao)

    Cinco passos para criar um servidor simples em Java:

    Passo 2: O servidor ouve a conexo cliente: O servidor bloqueia at o cliente se conectar. Socket connection =Socket connection =Socket connection =Socket connection = server.accept();server.accept();server.accept();server.accept();

    Passo 3: Enviar e receber dados:

    2005 by Pearson Education do Brasil

    Passo 3: Enviar e receber dados: OutputStreamOutputStreamOutputStreamOutputStream para enviar, e InputStreamInputStreamInputStreamInputStream para receber

    dados: O mtodo getOutputStreamgetOutputStreamgetOutputStreamgetOutputStream retorna OutputStreamOutputStreamOutputStreamOutputStream do SocketSocketSocketSocket.

    O mtodo getInputstreamsgetInputstreamsgetInputstreamsgetInputstreams retorna InputStreamInputStreamInputStreamInputStreamde SocketSocketSocketSocket.

  • 27

    24.4 Estabelecendo um servidor simples utilizando sockets de fluxo (Continuao)

    Cinco passos para criar um servidor simples em Java:

    Passo 4: Fase de processamento: O servidor e o cliente se comunicam via fluxos.

    Passo 5: Fechar fluxos e conexes.

    2005 by Pearson Education do Brasil

    Passo 5: Fechar fluxos e conexes. Mtodo closeclosecloseclose.

  • 28

    Com sockets, a E/S de rede aparece para programas Java como sendo similar E/S de arquivo seqencial. Os sockets ocultam muito da complexidade de programao de rede do

    Observao de engenharia de software 24.2

    2005 by Pearson Education do Brasil

    da complexidade de programao de rede do programador.

  • 29

    Com o multithreading do Java, podemos criar servidores com mltiplas threads que podem gerenciar vrias conexes simultneas com vrios clientes. Essa arquitetura de servidor

    Observao de engenharia de software 24.3

    2005 by Pearson Education do Brasil

    vrios clientes. Essa arquitetura de servidor com mltiplos threads precisamente a que utilizada nos servidores de rede populares.

  • 30

    Um servidor com mltiplas threads pode receber o SocketSocketSocketSocket retornado por uma a uma das chamadas a acceptacceptacceptaccept e criar uma nova thread que gerencia a E/S de rede por meio desse SocketSocketSocketSocket. Alternativamente, um servidor

    Observao de engenharia de software 24.4

    2005 by Pearson Education do Brasil

    desse SocketSocketSocketSocket. Alternativamente, um servidor com mltiplas threads pode manter um pool de threads (um conjunto de threads existentes) pronto para gerenciar a E/S de rede por meio dos novos SocketsSocketsSocketsSockets medida que so criados.Consulte o Captulo 23 para informaes adicionais sobre multithreading.

  • 31

    Dica de desempenho 24.2Em sistemas de alto desempenho em que a memria abundante, um servidor multiencadeado pode ser implementado para criar um pool de threads que pode ser atribudo rapidamente para tratar E/S de rede atravs de

    2005 by Pearson Education do Brasil

    rapidamente para tratar E/S de rede atravs de cada novo SocketSocketSocketSocket quando ele criado. Portanto, quando o servidor recebe uma conexo, ele no precisa incorrer no overhead da criao de thread.Quando a conexo fechada, a thread retornada ao pool para reutilizao.

  • 32

    24.5 Estabelecendo um cliente simples utilizando sockets de fluxo

    Quatro passos para criar um cliente simples em Java:

    Passo 1: Criar um SocketSocketSocketSocket para conexo ao servidor: Socket connection =Socket connection =Socket connection =Socket connection = newnewnewnew Socket (Socket (Socket (Socket (endereoDoServidorendereoDoServidorendereoDoServidorendereoDoServidor,,,, portaportaportaporta ););););

    2005 by Pearson Education do Brasil

    Passo 2: Obter InputStreamInputStreamInputStreamInputStream e OutputstreamOutputstreamOutputstreamOutputstream de SocketSocketSocketSocket.

    Passo 3: Processar informaes comunicadas. Passo 4: Fechar fluxos e conexo.

  • 33

    24.6 Interao cliente/servidor com conexes de socket de fluxo

    Aplicativo de bate-papo cliente/servidor simples: Utiliza soquetes de fluxo. O servidor espera uma tentativa de conexo do cliente. O cliente conecta-se ao servidor:

    Envia e receber mensagens.

    2005 by Pearson Education do Brasil

    Envia e receber mensagens. O cliente ou o servidor fecha a conexo. O servidor espera que o prximo cliente se conecte.

  • 34

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (1 de 8)Linhas 8-9

    Linha 25

    Linha 26

    1 // Fig. 24.5: Server.java// Fig. 24.5: Server.java// Fig. 24.5: Server.java// Fig. 24.5: Server.java 2 // // // // Configura uma classe Server que receber uma conexo de um cliente, enviaConfigura uma classe Server que receber uma conexo de um cliente, enviaConfigura uma classe Server que receber uma conexo de um cliente, enviaConfigura uma classe Server que receber uma conexo de um cliente, envia 3 // // // // uma string ao cliente e fecha a conexouma string ao cliente e fecha a conexouma string ao cliente e fecha a conexouma string ao cliente e fecha a conexo.... 4 importimportimportimport java.io.EOFException; java.io.EOFException; java.io.EOFException; java.io.EOFException; 5 importimportimportimport java.io.IOException; java.io.IOException; java.io.IOException; java.io.IOException; 6 importimportimportimport java.io.ObjectInputStr java.io.ObjectInputStr java.io.ObjectInputStr java.io.ObjectInputStream;eam;eam;eam; 7 importimportimportimport java.io.ObjectOutputStream; java.io.ObjectOutputStream; java.io.ObjectOutputStream; java.io.ObjectOutputStream; 8 importimportimportimport java.net.ServerSocket; java.net.ServerSocket; java.net.ServerSocket; java.net.ServerSocket; 9 importimportimportimport java.net.Socket; java.net.Socket; java.net.Socket; java.net.Socket; 10 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; 11 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; 12 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; 13 importimportimportimport javax.swing.JF javax.swing.JF javax.swing.JF javax.swing.JFrame;rame;rame;rame; 14 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; 15 importimportimportimport javax.swing.JTextArea; javax.swing.JTextArea; javax.swing.JTextArea; javax.swing.JTextArea; 16 importimportimportimport javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; 17 importimportimportimport javax.swing.SwingUtilities; javax.swing.SwingUtilities; javax.swing.SwingUtilities; javax.swing.SwingUtilities;

    Importa ServerSocket e Socket do pacote java.net

    2005 by Pearson Education do Brasil

    17 importimportimportimport javax.swing.SwingUtilities; javax.swing.SwingUtilities; javax.swing.SwingUtilities; javax.swing.SwingUtilities; 18

    19 public classpublic classpublic classpublic class Server Server Server Server extendsextendsextendsextends JFrame JFrame JFrame JFrame 20 {{{{ 21 privateprivateprivateprivate JTextField enterField; JTextField enterField; JTextField enterField; JTextField enterField; // // // // insereinsereinsereinsere a mensagem do usurio a mensagem do usurio a mensagem do usurio a mensagem do usurio 22 privateprivateprivateprivate JTextArea displayArea; JTextArea displayArea; JTextArea displayArea; JTextArea displayArea; // // // // exibe informaes para o usurioexibe informaes para o usurioexibe informaes para o usurioexibe informaes para o usurio 23 privateprivateprivateprivate ObjectOutputStream output; ObjectOutputStream output; ObjectOutputStream output; ObjectOutputStream output; // // // // gera fluxo gera fluxo gera fluxo gera fluxo de de de de sada para o clientesada para o clientesada para o clientesada para o cliente 24 privateprivateprivateprivate ObjectInputStream input; ObjectInputStream input; ObjectInputStream input; ObjectInputStream input; // // // // gera fluxo de entrada a partir gera fluxo de entrada a partir gera fluxo de entrada a partir gera fluxo de entrada a partir do clientedo clientedo clientedo cliente 25 privateprivateprivateprivate ServerSocket server; ServerSocket server; ServerSocket server; ServerSocket server; // // // // socket de servidorsocket de servidorsocket de servidorsocket de servidor 26 privateprivateprivateprivate Socket connection; Socket connection; Socket connection; Socket connection; // // // // conexo com o clienteconexo com o clienteconexo com o clienteconexo com o cliente 27 privateprivateprivateprivate intintintint counter = counter = counter = counter = 1111; ; ; ; // // // // contador do nmero de conexescontador do nmero de conexescontador do nmero de conexescontador do nmero de conexes 28

    Declara ServerSocket serverque espera a conexo do clienteDeclara Socket connection

    que se conecta ao cliente

  • 35

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (2 de 8)

    29 // // // // cccconfigura aonfigura aonfigura aonfigura a GUI GUI GUI GUI 30 publicpublicpublicpublic Server() Server() Server() Server() 31 { { { { 32 supersupersupersuper( "Server" );( "Server" );( "Server" );( "Server" ); 33

    34 enterField = enterField = enterField = enterField = newnewnewnew JTextField(); JTextField(); JTextField(); JTextField(); // cr// cr// cr// criiiia a a a enterFieldenterFieldenterFieldenterField 35 enterField.setEditable( enterField.setEditable( enterField.setEditable( enterField.setEditable( falsefalsefalsefalse ); ); ); ); 36 enterField.addActionListener( enterField.addActionListener( enterField.addActionListener( enterField.addActionListener( 37 newnewnewnew ActionListener() ActionListener() ActionListener() ActionListener() 38 { { { { 39 // // // // eeeenvia nvia nvia nvia messagmessagmessagmessageeeem para o m para o m para o m para o clientclientclientclienteeee 40 publicpublicpublicpublic voidvoidvoidvoid actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) actionPerformed( ActionEvent event ) 41 { { { { 42 sendData( event.getActionCommand() ); sendData( event.getActionCommand() ); sendData( event.getActionCommand() ); sendData( event.getActionCommand() ); 43 enterField.setT enterField.setT enterField.setT enterField.setText( ext( ext( ext( """""""" ); ); ); ); 44 } } } } // // // // fim do mtodofim do mtodofim do mtodofim do mtodo actionPerformedactionPerformedactionPerformedactionPerformed 45 } } } } // // // // ffffim da classe interna anim da classe interna anim da classe interna anim da classe interna annimanimanimanima

    2005 by Pearson Education do Brasil

    45 } } } } // // // // ffffim da classe interna anim da classe interna anim da classe interna anim da classe interna annimanimanimanima 46 ); ); ); ); // // // // ffffim da chamada paraim da chamada paraim da chamada paraim da chamada para addActionListener addActionListener addActionListener addActionListener 47

    48 add( enterField, add( enterField, add( enterField, add( enterField, BorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTH ); ); ); ); 49

    50 displayArea = displayArea = displayArea = displayArea = newnewnewnew JTextArea(); JTextArea(); JTextArea(); JTextArea(); // cr// cr// cr// criiiiaaaa displayArea displayArea displayArea displayArea 51 add( add( add( add( newnewnewnew JScrollPane( displayArea ), JScrollPane( displayArea ), JScrollPane( displayArea ), JScrollPane( displayArea ), BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ); ); ); ); 52

    53 setSize( setSize( setSize( setSize( 300300300300, , , , 150150150150 ); ); ); ); // // // // configura o tamanho da janelaconfigura o tamanho da janelaconfigura o tamanho da janelaconfigura o tamanho da janela 54 setVisible( setVisible( setVisible( setVisible( truetruetruetrue ); ); ); ); // // // // mmmmostra a janelaostra a janelaostra a janelaostra a janela 55 } } } } // // // // ffffim do construim do construim do construim do construttttorororor Server Server Server Server 56

  • 36

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (3 de 8)Linha 62

    Linha 68

    Linha 69

    Linha 70

    57 // // // // configura e executa o servidorconfigura e executa o servidorconfigura e executa o servidorconfigura e executa o servidor 58 publicpublicpublicpublic voidvoidvoidvoid runServer() runServer() runServer() runServer() 59 { { { { 60 trytrytrytry // // // // configura o servidor para receber conexes; processa as conexesconfigura o servidor para receber conexes; processa as conexesconfigura o servidor para receber conexes; processa as conexesconfigura o servidor para receber conexes; processa as conexes 61 { { { { 62 server = server = server = server = newnewnewnew ServerSocket( ServerSocket( ServerSocket( ServerSocket( 12345123451234512345, , , , 100100100100 ); ); ); ); // cr// cr// cr// criaiaiaia ServerSocket ServerSocket ServerSocket ServerSocket 63

    64 whilewhilewhilewhile ( ( ( ( truetruetruetrue ) ) ) ) 65 { { { { 66 trytrytrytry 67 { { { { 68 waitForConnection(); waitForConnection(); waitForConnection(); waitForConnection(); // // // // espera uma conexoespera uma conexoespera uma conexoespera uma conexo 69 getStreams(); getStreams(); getStreams(); getStreams(); // // // // obtm fluxos de entrada e sadaobtm fluxos de entrada e sadaobtm fluxos de entrada e sadaobtm fluxos de entrada e sada 70 processConne processConne processConne processConnection(); ction(); ction(); ction(); // process// process// process// processaaaa cone cone cone conexoxoxoxo 71 } } } } // // // // fim dofim dofim dofim do try try try try 72 catchcatchcatchcatch ( EOFException eofException ) ( EOFException eofException ) ( EOFException eofException ) ( EOFException eofException ) 73 { { { {

    Cria o ServerSocket na porta 12345 com uma fila de

    comprimento 100Espera uma conexo

    de um clienteDepois de a conexo ser estabelecida, obtm

    referncias aos fluxos para a conexo

    Envia a mensagem de conexo inicial ao cliente e

    processa todas as mensagens recebidas do

    2005 by Pearson Education do Brasil

    73 { { { { 74 displayMessage( displayMessage( displayMessage( displayMessage( """"\\\\nServer terminated connection" nServer terminated connection" nServer terminated connection" nServer terminated connection" );););); 75 } } } } // // // // fim dofim dofim dofim do catch catch catch catch

    mensagens recebidas do cliente

  • 37

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (4 de 8)Linha 93

    Linha 95

    Linha 102

    Linha 103

    76 finallyfinallyfinallyfinally 77 { { { { 78 closeConnection(); closeConnection(); closeConnection(); closeConnection(); // // // // fechafechafechafecha c c c conexoonexoonexoonexo 79 counter++; counter++; counter++; counter++; 80 } } } } // // // // fim dofim dofim dofim do finally finally finally finally 81 } } } } // // // // fim dofim dofim dofim do while while while while 82 } } } } // // // // fim dofim dofim dofim do try try try try 83 catchcatchcatchcatch ( IOExceptio ( IOExceptio ( IOExceptio ( IOException ioException ) n ioException ) n ioException ) n ioException ) 84 { { { { 85 ioException.printStackTrace(); ioException.printStackTrace(); ioException.printStackTrace(); ioException.printStackTrace(); 86 } } } } // // // // fim dofim dofim dofim do catch catch catch catch 87 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo runServerrunServerrunServerrunServer 88

    89 // // // // espera que a conexo chegue eespera que a conexo chegue eespera que a conexo chegue eespera que a conexo chegue e,,,, ento ento ento ento,,,, exibe informaes sobre a conexo exibe informaes sobre a conexo exibe informaes sobre a conexo exibe informaes sobre a conexo 90 privateprivateprivateprivate voidvoidvoidvoid waitF waitF waitF waitForConnection() orConnection() orConnection() orConnection() throwsthrowsthrowsthrows IOException IOException IOException IOException 91 { { { { 92 displayMessage( displayMessage( displayMessage( displayMessage( "Waiting for connection"Waiting for connection"Waiting for connection"Waiting for connection\\\\n"n"n"n" ); ); ); );

    Gera o nome de host do computador que criou a conexo utilizando os mtodos

    Socket getInetAddress e o mtodo InetAddress getHostName

    Utiliza o mtodo ServerSocketaccept para esperar uma conexo de

    um cliente

    2005 by Pearson Education do Brasil

    92 displayMessage( displayMessage( displayMessage( displayMessage( "Waiting for connection"Waiting for connection"Waiting for connection"Waiting for connection\\\\n"n"n"n" ); ); ); ); 93 connection = server.accept(); connection = server.accept(); connection = server.accept(); connection = server.accept(); // // // // permite que o servido aceitepermite que o servido aceitepermite que o servido aceitepermite que o servido aceite cone cone cone conexoxoxoxo 94 displayMessage( displayMessage( displayMessage( displayMessage( "Connection ""Connection ""Connection ""Connection " + counter + + counter + + counter + + counter + " received from: "" received from: "" received from: "" received from: " + + + + 95 connection.getInetAddress().getHostName()connection.getInetAddress().getHostName()connection.getInetAddress().getHostName()connection.getInetAddress().getHostName() ); ); ); ); 96 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo waitForConnectionwaitForConnectionwaitForConnectionwaitForConnection 97

    98 // // // // obtm fluxos para enviar e receber dadosobtm fluxos para enviar e receber dadosobtm fluxos para enviar e receber dadosobtm fluxos para enviar e receber dados 99 privateprivateprivateprivate voidvoidvoidvoid getStreams() getStreams() getStreams() getStreams() throwsthrowsthrowsthrows IOException IOException IOException IOException 100 { { { { 101 // // // // configura o fluconfigura o fluconfigura o fluconfigura o fluxo de sada para objetosxo de sada para objetosxo de sada para objetosxo de sada para objetos 102 output = output = output = output = newnewnewnew ObjectOutputStream( connection.getOutputStream() ); ObjectOutputStream( connection.getOutputStream() ); ObjectOutputStream( connection.getOutputStream() ); ObjectOutputStream( connection.getOutputStream() ); 103 output.flush(); output.flush(); output.flush(); output.flush(); // // // // esvazia buffer de sada p/ enviar as informaes de cabealhoesvazia buffer de sada p/ enviar as informaes de cabealhoesvazia buffer de sada p/ enviar as informaes de cabealhoesvazia buffer de sada p/ enviar as informaes de cabealho 104

    Obtm OutputStream de Socket e utiliza-o para inicializar

    ObjectOutputStream

    O mtodo flush esvazia o buffer de sada e envia as informaes de

    cabealho

  • 38

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (5 de 8)

    Linha 106

    Linha 124

    105 // // // // configura o fluxo de entrada para objetosconfigura o fluxo de entrada para objetosconfigura o fluxo de entrada para objetosconfigura o fluxo de entrada para objetos 106 input = input = input = input = newnewnewnew ObjectInputStream( connection.getInputStream() ); ObjectInputStream( connection.getInputStream() ); ObjectInputStream( connection.getInputStream() ); ObjectInputStream( connection.getInputStream() ); 107

    108 displayMessage( displayMessage( displayMessage( displayMessage( """"\\\\nGot I/O streamsnGot I/O streamsnGot I/O streamsnGot I/O streams\\\\n"n"n"n" ); ); ); ); 109 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo getStreamsgetStreamsgetStreamsgetStreams 110

    111 // process // process // process // processaaaa conexo com conexo com conexo com conexo com clientclientclientclienteeee 112 privateprivateprivateprivate voidvoidvoidvoid processConnection() processConnection() processConnection() processConnection() throwsthrowsthrowsthrows IOException IOException IOException IOException 113 { { { { 114 String message = String message = String message = String message = "Connection successful""Connection successful""Connection successful""Connection successful";;;; 115 sendData( message ); sendData( message ); sendData( message ); sendData( message ); // // // // envia uma mensagem de conexo bemenvia uma mensagem de conexo bemenvia uma mensagem de conexo bemenvia uma mensagem de conexo bem----sucedidasucedidasucedidasucedida 116

    117 // // // // ativa enativa enativa enativa enterField de modo que usurio do servidor possa enviar mensagensterField de modo que usurio do servidor possa enviar mensagensterField de modo que usurio do servidor possa enviar mensagensterField de modo que usurio do servidor possa enviar mensagens 118 setTextFieldEditable( setTextFieldEditable( setTextFieldEditable( setTextFieldEditable( truetruetruetrue ); ); ); ); 119

    120 dodododo // process// process// process// processa mensagens enviadas doa mensagens enviadas doa mensagens enviadas doa mensagens enviadas do client client client clienteeee 121 { { { {

    Obtm InputStream de Socket e utiliza-o para inicializar ObjectInputStream

    Utiliza o mtodo ObjectInputStreamreadObject para ler uma String do

    cliente

    2005 by Pearson Education do Brasil

    121 { { { { 122 trytrytrytry // // // // llll messag messag messag messagem e a exibeem e a exibeem e a exibeem e a exibe 123 { { { { 124 message = ( String ) input.readObject(); message = ( String ) input.readObject(); message = ( String ) input.readObject(); message = ( String ) input.readObject(); // // // // l noval noval noval nova mess mess mess messagemagemagemagem 125 displayMessage( displayMessage( displayMessage( displayMessage( """"\\\\n"n"n"n" + message ); + message ); + message ); + message ); // // // // exibeexibeexibeexibe messag messag messag messagemememem 126 } } } } // // // // fim dofim dofim dofim do try try try try 127 catchcatchcatchcatch ( ClassNotFoundException classNotFoundException ) ( ClassNotFoundException classNotFoundException ) ( ClassNotFoundException classNotFoundException ) ( ClassNotFoundException classNotFoundException ) 128 { { { { 129 displayMessage( displayMessage( displayMessage( displayMessage( """"\\\\nUnknown object type received" nUnknown object type received" nUnknown object type received" nUnknown object type received" );););); 130 } } } } // // // // fim dofim dofim dofim do catch catch catch catch 131

    cliente

  • 39

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (6 de 8)Linhas 136-151

    Linha 145

    Linha 158

    132 } } } } whilewhilewhilewhile ( !message.equals( ( !message.equals( ( !message.equals( ( !message.equals( "CLIENT>>> TERMINATE""CLIENT>>> TERMINATE""CLIENT>>> TERMINATE""CLIENT>>> TERMINATE" ) ); ) ); ) ); ) ); 133 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo processConnectionprocessConnectionprocessConnectionprocessConnection 134

    135 // // // // fecha os fluxos e o socketfecha os fluxos e o socketfecha os fluxos e o socketfecha os fluxos e o socket 136 privateprivateprivateprivate voidvoidvoidvoid closeConnection() closeConnection() closeConnection() closeConnection() 137 { { { { 138 displayMessage( displayMessage( displayMessage( displayMessage( """"\\\\nTerminating connnTerminating connnTerminating connnTerminating connectionectionectionection\\\\n"n"n"n" ); ); ); ); 139 setTextFieldEditable( setTextFieldEditable( setTextFieldEditable( setTextFieldEditable( falsefalsefalsefalse ); ); ); ); // d// d// d// desativaesativaesativaesativa enterField enterField enterField enterField 140

    141 trytrytrytry 142 { { { { 143 output.close(); output.close(); output.close(); output.close(); // // // // fecha o fluxo de sadafecha o fluxo de sadafecha o fluxo de sadafecha o fluxo de sada 144 input.close(); input.close(); input.close(); input.close(); // // // // fecha o fluxo de entradafecha o fluxo de entradafecha o fluxo de entradafecha o fluxo de entrada 145 connectioconnectioconnectioconnection.close(); n.close(); n.close(); n.close(); // // // // fecha ofecha ofecha ofecha o socket socket socket socket 146 } } } } // // // // fim dofim dofim dofim do try try try try 147 catch catch catch catch ( IOException ioException ) ( IOException ioException ) ( IOException ioException ) ( IOException ioException ) 148 { { { {

    O mtodo closeConnectionfecha fluxos e sockets

    Invoca o mtodo Socketclose para fechar o socket

    2005 by Pearson Education do Brasil

    148 { { { { 149 ioException.printStackTrace(); ioException.printStackTrace(); ioException.printStackTrace(); ioException.printStackTrace(); 150 } } } } // // // // fim dofim dofim dofim do catch catch catch catch 151 } } } } // // // // fim do mtodofim do mtodofim do mtodofim do mtodo closeConnection closeConnection closeConnection closeConnection 153 // // // // envenvenvenvia ia ia ia messagmessagmessagmessagem para o em para o em para o em para o clientclientclientclienteeee 154 privateprivateprivateprivate voidvoidvoidvoid sendData( String message ) sendData( String message ) sendData( String message ) sendData( String message ) 155 { { { { 156 trytrytrytry // // // // envia envia envia envia objeobjeobjeobjeto para o to para o to para o to para o clientclientclientclienteeee 157 { { { { 158 output.writeObject( output.writeObject( output.writeObject( output.writeObject( "SERVER>>> " "SERVER>>> " "SERVER>>> " "SERVER>>> " + message );+ message );+ message );+ message ); 159 output.flush(); output.flush(); output.flush(); output.flush(); // // // // esvazia sadaesvazia sadaesvazia sadaesvazia sada para o cliente para o cliente para o cliente para o cliente 160 displayMessage( displayMessage( displayMessage( displayMessage( """"\\\\nSERVER>>> "nSERVER>>> "nSERVER>>> "nSERVER>>> " + message ); + message ); + message ); + message ); 161 } } } } // // // // fim do fim do fim do fim do trytrytrytry

    Utiliza o mtodo ObjectOutputStreamwriteObject para enviar uma String ao

    cliente

  • 40

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (7 de 8)

    162 catchcatchcatchcatch ( IOException ioException ) ( IOException ioException ) ( IOException ioException ) ( IOException ioException ) 163 { { { { 164 displayArea.append( displayArea.append( displayArea.append( displayArea.append( """"\\\\nError writing object"nError writing object"nError writing object"nError writing object" ); ); ); ); 165 } } } } // // // // fim dofim dofim dofim do catch catch catch catch 166 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo sendDatasendDatasendDatasendData 167

    168 // manipula displayArea // manipula displayArea // manipula displayArea // manipula displayArea na thread de despacho de ena thread de despacho de ena thread de despacho de ena thread de despacho de eventosventosventosventos 169 privateprivateprivateprivate voidvoidvoidvoid displayMessage( displayMessage( displayMessage( displayMessage( finalfinalfinalfinal String messageToDisplay ) String messageToDisplay ) String messageToDisplay ) String messageToDisplay ) 170 { { { { 171 SwingUtilities.invokeLater( SwingUtilities.invokeLater( SwingUtilities.invokeLater( SwingUtilities.invokeLater( 172 newnewnewnew Runnable() Runnable() Runnable() Runnable() 173 { { { { 174 publicpublicpublicpublic voidvoidvoidvoid run() run() run() run() // // // // atualizaatualizaatualizaatualiza displayArea displayArea displayArea displayArea 175 { { { { 176 displayArea.append( messageToDisplay ); displayArea.append( messageToDisplay ); displayArea.append( messageToDisplay ); displayArea.append( messageToDisplay ); // // // // anexaanexaanexaanexa messag messag messag messagemememem 177 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo runrunrunrun 178 } } } } // // // // fim da classe interna annimafim da classe interna annimafim da classe interna annimafim da classe interna annima

    2005 by Pearson Education do Brasil

    178 } } } } // // // // fim da classe interna annimafim da classe interna annimafim da classe interna annimafim da classe interna annima 179 ); ); ); ); // // // // fim da chamada para fim da chamada para fim da chamada para fim da chamada para SwingUtilities.invokeLaterSwingUtilities.invokeLaterSwingUtilities.invokeLaterSwingUtilities.invokeLater 180 } } } } // // // // fim do fim do fim do fim do mtodo mtodo mtodo mtodo displayMessagedisplayMessagedisplayMessagedisplayMessage 181

  • 41

    Resumo

    Server.javaServer.javaServer.javaServer.java

    (8 de 8)

    182 // // // // manipula o enterField na thread de despacho de eventosmanipula o enterField na thread de despacho de eventosmanipula o enterField na thread de despacho de eventosmanipula o enterField na thread de despacho de eventos 183 privateprivateprivateprivate voidvoidvoidvoid setTextFieldEditable( setTextFieldEditable( setTextFieldEditable( setTextFieldEditable( finalfinalfinalfinal booleanbooleanbooleanboolean editable ) editable ) editable ) editable ) 184 { { { { 185 SwingUtilities.invokeLater( SwingUtilities.invokeLater( SwingUtilities.invokeLater( SwingUtilities.invokeLater( 186 newnewnewnew Runnable() Runnable() Runnable() Runnable() 187 { { { { 188 publipublipublipublicccc voidvoidvoidvoid run() run() run() run() // // // // configura a editabilidade do enterFieldconfigura a editabilidade do enterFieldconfigura a editabilidade do enterFieldconfigura a editabilidade do enterField 189 { { { { 190 enterField.setEditable( editable ); enterField.setEditable( editable ); enterField.setEditable( editable ); enterField.setEditable( editable ); 191 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo runrunrunrun 192 } } } } // // // // fim da classe innerfim da classe innerfim da classe innerfim da classe inner 193 ); ); ); ); // // // // fim da chamada para fim da chamada para fim da chamada para fim da chamada para SwiSwiSwiSwingUtilities.invokeLaterngUtilities.invokeLaterngUtilities.invokeLaterngUtilities.invokeLater 194 } } } } // // // // fim do mtodofim do mtodofim do mtodofim do mtodo setTextFieldEditable setTextFieldEditable setTextFieldEditable setTextFieldEditable 195 } } } } // // // // fim da clasfim da clasfim da clasfim da classesesese Server Server Server Server

    2005 by Pearson Education do Brasil

  • 42

    Resumo

    ServerTest.javaServerTest.javaServerTest.javaServerTest.java

    1 // Fig. 24.6: ServerTest.java// Fig. 24.6: ServerTest.java// Fig. 24.6: ServerTest.java// Fig. 24.6: ServerTest.java 2 // Test// Test// Test// Testa o aplicativoa o aplicativoa o aplicativoa o aplicativo Server. Server. Server. Server. 3 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; 4

    5 public classpublic classpublic classpublic class ServerTest ServerTest ServerTest ServerTest 6 {{{{ 7 public static voidpublic static voidpublic static voidpublic static void main( String args[] ) main( String args[] ) main( String args[] ) main( String args[] ) 8 { { { { 9 Server application = Server application = Server application = Server application = newnewnewnew Server(); Server(); Server(); Server(); // cr// cr// cr// cria o servidoia o servidoia o servidoia o servidorrrr 10 application.setDefaultCloseOperation( application.setDefaultCloseOperation( application.setDefaultCloseOperation( application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSEJFrame.EXIT_ON_CLOSE ); ); ); ); 11 application.runServer(); application.runServer(); application.runServer(); application.runServer(); // // // // execuexecuexecuexecutttta a a a o o o o aplicatiaplicatiaplicatiaplicativo do servidorvo do servidorvo do servidorvo do servidor 12 } } } } // // // // fim dofim dofim dofim do main main main main 13 } } } } // // // // fim da fim da fim da fim da classclassclassclasseeee ServerTest ServerTest ServerTest ServerTest

    2005 by Pearson Education do Brasil

  • 43

    Erro comum de programao 24.1

    Especificar uma porta que j est em utilizao ou especificar um nmero de porta invlido ao criar um ServerSocketServerSocketServerSocketServerSocket resulta em uma BindExceptionBindExceptionBindExceptionBindException.

    2005 by Pearson Education do Brasil

    BindExceptionBindExceptionBindExceptionBindException.

  • 44

    Observao de engenharia de software 24.5

    Ao utilizar um ObjectOutputStreamObjectOutputStreamObjectOutputStreamObjectOutputStream e um ObjectInputStreamObjectInputStreamObjectInputStreamObjectInputStream para enviar e receber objetos em uma conexo de rede, sempre crie o ObjectOutputStreamObjectOutputStreamObjectOutputStreamObjectOutputStream primeiro e esvazie (flushflushflushflush) o fluxo de modo que o

    2005 by Pearson Education do Brasil

    (flushflushflushflush) o fluxo de modo que o ObjectInputStreamObjectInputStreamObjectInputStreamObjectInputStream do cliente possa se preparar para receber os dados. Isso s necessrio para aplicativos de rede que se comunicam utilizando ObjectOutputStreamObjectOutputStreamObjectOutputStreamObjectOutputStreame ObjectInputStreamObjectInputStreamObjectInputStreamObjectInputStream.

  • 45

    Dica de desempenho 24.3

    Os componentes de entrada e sada de um computador so, em geral, muito mais lentos que a memria do computador. Comumente, buffers de sada so utilizados para aumentar a

    2005 by Pearson Education do Brasil

    de sada so utilizados para aumentar a eficincia de um aplicativo enviando volumes maiores de dados menos vezes, reduzindo, assim, o nmero de vezes que um aplicativo acessa os componentes de entrada e sada do computador.

  • 46

    Resumo

    Client.javaClient.javaClient.javaClient.java

    (1 de 7)

    1 // Fig. 24.7: Client.java// Fig. 24.7: Client.java// Fig. 24.7: Client.java// Fig. 24.7: Client.java 2 // // // // Cliente que l e exibe as informaes enviadas a partir de um ServidorCliente que l e exibe as informaes enviadas a partir de um ServidorCliente que l e exibe as informaes enviadas a partir de um ServidorCliente que l e exibe as informaes enviadas a partir de um Servidor.... 3 importimportimportimport java.io.EOFException; java.io.EOFException; java.io.EOFException; java.io.EOFException; 4 importimportimportimport java.io.IOException; java.io.IOException; java.io.IOException; java.io.IOException; 5 importimportimportimport java.io.ObjectInputStream; java.io.ObjectInputStream; java.io.ObjectInputStream; java.io.ObjectInputStream; 6 importimportimportimport java.io.ObjectOutputStream; java.io.ObjectOutputStream; java.io.ObjectOutputStream; java.io.ObjectOutputStream; 7 imimimimportportportport java.net.InetAddress; java.net.InetAddress; java.net.InetAddress; java.net.InetAddress; 8 importimportimportimport java.net.Socket; java.net.Socket; java.net.Socket; java.net.Socket; 9 importimportimportimport java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; java.awt.BorderLayout; 10 importimportimportimport java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; java.awt.event.ActionEvent; 11 importimportimportimport java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; java.awt.event.ActionListener; 12 importimportimportimport javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; javax.swing.JFrame; 13 importimportimportimport javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; javax.swing.JScrollPane; 14 imporimporimporimportttt javax.swing.JTextArea; javax.swing.JTextArea; javax.swing.JTextArea; javax.swing.JTextArea; 15 importimportimportimport javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; javax.swing.JTextField; 16 importimportimportimport javax.swing.SwingUtilities; javax.swing.SwingUtilities; javax.swing.SwingUtilities; javax.swing.SwingUtilities; 17

    2005 by Pearson Education do Brasil

    17

    18 publicpublicpublicpublic classclassclassclass Client Client Client Client extendsextendsextendsextends JFrame JFrame JFrame JFrame 19 {{{{ 20 privateprivateprivateprivate JTextField enterField; JTextField enterField; JTextField enterField; JTextField enterField; // // // // insere informaes fornecidas pelo usurioinsere informaes fornecidas pelo usurioinsere informaes fornecidas pelo usurioinsere informaes fornecidas pelo usurio 21 privateprivateprivateprivate JTextArea displayArea; JTextArea displayArea; JTextArea displayArea; JTextArea displayArea; // // // // exibe informaes para o usurioexibe informaes para o usurioexibe informaes para o usurioexibe informaes para o usurio 22 privateprivateprivateprivate ObjectOutputStream output; ObjectOutputStream output; ObjectOutputStream output; ObjectOutputStream output; // // // // gera o fluxo de sada para o servidorgera o fluxo de sada para o servidorgera o fluxo de sada para o servidorgera o fluxo de sada para o servidor 23 privateprivateprivateprivate ObjectInputStream input; ObjectInputStream input; ObjectInputStream input; ObjectInputStream input; // // // // gera o fluxo de entrada do servidorgera o fluxo de entrada do servidorgera o fluxo de entrada do servidorgera o fluxo de entrada do servidor 24 privateprivateprivateprivate String message = String message = String message = String message = """"""""; ; ; ; // messag// messag// messag// messagem doem doem doem do serv serv serv servidoidoidoidorrrr 25 privateprivateprivateprivate String chatServer; String chatServer; String chatServer; String chatServer; // // // // servidor de host para esse aplicativoservidor de host para esse aplicativoservidor de host para esse aplicativoservidor de host para esse aplicativo 26 privateprivateprivateprivate Socket client; Socket client; Socket client; Socket client; // socket // socket // socket // socket para para para para comunicacomunicacomunicacomunicao com o servidoro com o servidoro com o servidoro com o servidor 27

  • 47

    Resumo

    Client.javaClient.javaClient.javaClient.java

    (2 de 7)

    28 // // // // inicializa chatServer e configura a GUIinicializa chatServer e configura a GUIinicializa chatServer e configura a GUIinicializa chatServer e configura a GUI 29 publicpublicpublicpublic Client( String host ) Client( String host ) Client( String host ) Client( String host ) 30 { { { { 31 supersupersupersuper( ( ( ( "Client""Client""Client""Client" ); ); ); ); 32

    33 chatServer = host; chatServer = host; chatServer = host; chatServer = host; // // // // configura o servidor ao qual esse cliente se conectaconfigura o servidor ao qual esse cliente se conectaconfigura o servidor ao qual esse cliente se conectaconfigura o servidor ao qual esse cliente se conecta 34

    35 enterField = enterField = enterField = enterField = newnewnewnew JTe JTe JTe JTextField(); xtField(); xtField(); xtField(); // // // // cria enterFieldcria enterFieldcria enterFieldcria enterField 36 enterField.setEditable( enterField.setEditable( enterField.setEditable( enterField.setEditable( falsefalsefalsefalse ); ); ); ); 37 enterField.addActionListener( enterField.addActionListener( enterField.addActionListener( enterField.addActionListener( 38 newnewnewnew ActionListener() ActionListener() ActionListener() ActionListener() 39 { { { { 40 // // // // envia envia envia envia memememennnnsagsagsagsagemememem para o servidorpara o servidorpara o servidorpara o servidor 41 publicpublicpublicpublic voidvoidvoidvoid actionPer actionPer actionPer actionPerformed( ActionEvent event )formed( ActionEvent event )formed( ActionEvent event )formed( ActionEvent event ) 42 { { { { 43 sendData( event.getActionCommand() ); sendData( event.getActionCommand() ); sendData( event.getActionCommand() ); sendData( event.getActionCommand() ); 44 enterField.setText( enterField.setText( enterField.setText( enterField.setText( """""""" ); ); ); );

    2005 by Pearson Education do Brasil

    44 enterField.setText( enterField.setText( enterField.setText( enterField.setText( """""""" ); ); ); ); 45 } } } } // // // // fim do mtodo fim do mtodo fim do mtodo fim do mtodo actionPerformedactionPerformedactionPerformedactionPerformed 46 } } } } // // // // fim da classe interna annimafim da classe interna annimafim da classe interna annimafim da classe interna annima 47 ); ); ); ); // // // // fim da chamada parafim da chamada parafim da chamada parafim da chamada para addActionListener addActionListener addActionListener addActionListener 48

    49 add( enterField, add( enterField, add( enterField, add( enterField, BorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTHBorderLayout.NORTH ); ); ); ); 50

    51 displayArea = new JTextArea(); displayArea = new JTextArea(); displayArea = new JTextArea(); displayArea = new JTextArea(); // cr// cr// cr// criaiaiaia displayArea displayArea displayArea displayArea 52 add( add( add( add( newnewnewnew JScrollPane( displayArea ), JScrollPane( displayArea ), JScrollPane( displayArea ), JScrollPane( displayArea ), BorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTERBorderLayout.CENTER ); ); ); ); 53

    54 setSize( setSize( setSize( setSize( 300300300300, , , , 150150150150 ); ); ); ); // // // // configura o tamanho da janelaconfigura o tamanho da janelaconfigura o tamanho da janelaconfigura o tamanho da janela 55 setVisible( setVisible( setVisibl