O que é soquete
Os dois programas na troca de dados de implementação de rede por meio de uma conexão de comunicação de dois caminhos. O soquete é geralmente usado para alcançar a conexão entre o cliente e a festa de serviço. O soquete é uma interface de programação muito popular do protocolo TCP/IP, e um soquete é determinado por um endereço IP e um número da porta.
No entanto, os tipos de protocolos suportados pelo soquete não são apenas TCP/IP; portanto, não há necessariamente conexão entre os dois. No ambiente Java, a programação do soquete refere -se principalmente à programação de rede com base no protocolo TCP/IP.
O processo de comunicação de soquete
Se o servidor final escuta (monitor) possui uma solicitação de conexão, o cliente envia uma solicitação de conexão para o lado do servidor e o servidor envia de volta a mensagem de acesso ao cliente. Uma conexão é estabelecida. Tanto o servidor quanto o cliente podem se comunicar com a outra parte através de send, gravação e outros métodos.
Para um soquete completo, as seguintes estruturas básicas devem ser incluídas.
(1) criar um soquete;
(2) abra a entrada/saída conectada ao soquete;
(3) Operação de leitura/gravação do soquete de acordo com um determinado protocolo;
(4) Desligue o soquete. não causar nada para causar qualquer coisa.
Crie soquete
O Java fornece dois tipos de soquetes e servidores em java.net, que são usados para representar o cliente e o servidor da conexão de dois caminhos. Essas são duas classes muito boas que são muito boas, o que é conveniente de usar. O método da estrutura é o seguinte:
SOOCK (Endereço Indaddress, porta INT); LocalAddr, Int Localport) Soquete (Endereço INETADDDRESS, Intaddddress LocalDDR, INT Localport) ServerSocket (INT).
Entre eles, o endereço IP, o nome do host e o número da outra parte na conexão de duas via, respectivamente. O endereço do host do ServerSocket), o Impl é a classe pai do soquete, que pode ser usada para criar um servidorsocket e pode ser usada para criar um soquete. Contagem significa o número máximo de conexões que o servidor pode suportar. Por exemplo: Aprendendo a rede de vídeo http://www.xxspw.com
Cliente de soquete = novo soquete
Observe que, ao selecionar uma porta, você deve ter cuidado. Cada porta fornece um serviço específico. O número da porta de 0 ~ 1023 é reservado pelo sistema. Escolha o número da porta, é melhor escolher um maior que 1023. O número é para evitar conflitos.
Se ocorrer um erro ao criar um soquete, a IoException será gerada e deve ser processada no programa. Portanto, criar um soquete ou servidorsocket deve ser capturado ou jogado.
Código
servidor
Pacote de pacote; Aceitar (); o " +count +" vezes! "); count ++; string line = input.readline (); system.out.println (" Cliente disse: " +linha); if (" line.equals ("exit") ) {flag = false; cliente {client .close ();}} finalmente {server.close ();}}}
cliente
Pacote de pacote; . NIN. }}}}}}
IP de ligação ao servidor
Ao escrever soquetes com C, a estrutura da Struct Sockaddr_in pode especificar Sin_addr.s_addr, ou seja, você pode especificar o endereço IP.
Posso apenas vincular o endereço IP da placa de rede ETH0, porque meu LO e WLAN0 podem estar usando um host virtual nginx com uma porta.
plano
Um construtor do ServerSocket é o seguinte:
Public ServerSocket (Int Port, Intaddddress bindddr) lança IoException
parâmetro:
Porta -porta TCP -Local
Backlog -Listing para Backlog
bindaddr -para ser bi -liner pelo servidor
Como o inetaddress não tem construtor, eu fui emaranhado aqui por um tempo.
Por exemplo, código
Indadress bindip = inetaddress.getbyName ("192.168.1.168"); Acesso simultâneo
O servidor lida com vários clientes adicionando solicitações multi -thread ao mesmo tempo.
Código do servidor
Capitalsket; Estático int clientnum = 0; ), CapitalizeRver.clientnum ++); (Soquete s, int id) {this.client = s; true) {string data = input.readline (); ); ;} Catch (ioexception e) {e.printStackTrace ();}}}}}}}}}}}}
Código do cliente O código do cliente basicamente não mudou, adicionando uma operação de saída
Pacote capitalsket; 1.168 ", 9898); tente {printWriter output = new PrintWriter (client.getOutputStream (), true); scanner cin = new scanner (system.in); palavras de string; while (cin .hasnext ()) {words = cin. Nextline (); ;} finalmente {client.close ();}}}}