1. Visão geral
A classe de soquete é a classe básica para o Java executar operações de TCP do cliente. Essa classe em si usa código para se comunicar através da pilha TCP local do sistema operacional host. Os métodos da classe de soquete estabelecerão e destruirão conexões e definirão várias opções de soquete.
A classe ServerSocket é a classe básica para Java para executar operações do lado do servidor. Esta classe é executada no servidor e ouve as conexões TCP de entrada. Cada servidor de soquete ouve uma porta do servidor. Quando o cliente do host remoto tenta se conectar a esta porta, o servidor é acordado e retorna um objeto de soquete normal representando o soquete entre os dois hosts.
2. O que é TCP?
O TCP é um protocolo de comunicação de camada de transporte baseado em fluxo baseado em conexão, confiável, baseado em fluxo. A comunicação TCP é dividida no cliente e no servidor, e os objetos correspondentes são soquetes e servidores, respectivamente.
Quando um computador precisa se conectar a outro computador remoto, o protocolo TCP permite que eles estabeleçam uma conexão: um link virtual para enviar e receber dados. O protocolo TCP é responsável por coletar pacotes de informações e enviá -los em ordem apropriada e, em seguida, revertê -los corretamente após recebê -los na extremidade de recebimento. Para garantir que o pacote de dados seja preciso durante a transmissão, o TCP usa um mecanismo de retransmissão: quando uma entidade de comunicação envia uma mensagem para outra entidade de comunicação, ele precisa receber as informações de confirmação de outra entidade. Se nenhuma informação de confirmação for recebida, as informações enviadas agora serão ressentidas novamente.
Iii. Comunicação TCP
1. Construtor
A classe de soquete implementa soquetes do cliente e o construtor pode especificar o host e a porta que você deseja se conectar. O host pode ser especificado como inetaddress ou string, e a porta é sempre especificada como um valor int entre 0 e 65535.
Socket S = novo soquete ("127.0.0.1", 10001); // Crie um soquete de fluxo e conecte -o ao número da porta especificada no host especificadoA classe Serversocket implementa soquetes do servidor. O soquete do servidor aguarda que a solicitação seja transmitida pela rede, ele executa algumas operações com base na solicitação e retorna o resultado ao solicitante.
ServerSocket SS = new ServerSocket (10001); // Crie um soquete do servidor ligado a uma porta específica
2. Exemplo: cópia do arquivo TCP
Cliente:
classe pública clientdemo {public static void main (string [] args) lança desconhecidohostexception, ioexception {socket s = new Socket ("127.0.0.1", 10004); buffersader)) linha = null;/*printWriter Out = new PrintWriter (s.getOutputStream (), true); while ((line = buf.readline ())! = null) {out.println (line); } */Bufferwriter out = new bufferWriter (new OutputStreamWriter (s.getOutputStream ())); while ((line = buf.readline ())! = null) {out.write (line); out.newline (); out.flush ();} s.shutdownoutput (); bufferreader em = new buffarredreader (new inputStreamreader (s.getInputStream ()); str = in.readLine (); System.out.println (str); s.close (); buf.close ();}}Lado do servidor:
public class ServerDemo {public static void main (string [] args) lança ioexception {serverSocket ss = new ServerSocket (10004); soquete s = ss.accept (); bufferReader in = new BufferReader (new inputStreamReader (s.getInputStream ()); string line = null; FileWriter ("c: //users//administrator//desktop//2.txt"), true); while ((line = in.readline ())! = null) {buf.println (line); }*/Bufferwriter buf = new bufferWriter (new FileWriter ("c: //users//administrator//desktop//2.txt")); PrintWriter (s.getOutputStream (), true); out.println ("transferência bem -sucedida!"); Ss.close (); buf.close ();}}4. Aplicação do soquete na navegação
Podemos escrever o lado do servidor no Eclipse e depois acessá -lo usando o navegador.
por exemplo, o código do lado do servidor é:
classe pública SocketServer {public static void main (string [] args) lança IoException {serverSocket Server = new ServerSocket (11000); Socket client = server.accept (); PrintWriter Out = new PrintWriter (client.getOutputStream (), true); out.println ("Hello!"); server.close (); }}Em seguida, abra o navegador do IE, digite http://192.168.1.120:11000/ no endereço (192.168.1.120 é o endereço IP local), e o resultado é
Em aplicativos normais, o navegador emite uma solicitação ao servidor Tomacat para obter recursos como imagens da página da web. Tomca é um software do lado do servidor escrito em Java.
Agora escrevemos o lado do servidor como:
classe pública SocketServer {public static void main (string [] args) lança IoException {serverSocket Server = new ServerSocket (11000); Socket client = server.accept (); PrintWriter Out = new PrintWriter (client.getOutputStream (), true); BufferredReader in = new BufferredReader (new InputStreamReader (client.getInputStream ())); Linha de string = null; while ((line = in.readline ())! = null) System.out.println (linha); out.println ("Hello!"); server.close (); }}Então, ao acessar o navegador, você pode ver que os dados do cabeçalho da solicitação enviados pelo navegador (cliente) para o servidor são:
Usando os princípios acima, podemos escrever um software do lado do navegador (cliente) semelhante ao IE por nós mesmos. Primeiro, adicione um recurso Demo.html ao diretório de instalação do Tomcat c: /apache-tomcat-7.0.62/webapps/myweb e depois escreva o cliente, o código é o seguinte:
classe pública clientdemo {public static void main (string [] args) lança desconhecidoHosTexception, ioException {Socket s = new Socket ("192.168.1.120", 8080); impressão ouswriter = new PrintWriter (s.getoutStream (), true); Http/1.1 "); out.println (" aceite:*/*/"); out.println (" host: 192.168.1.120:11000") ;out.println("Connection: Keep-alive "); // ou saída linhas vazias, esta etapa é indispensável. InputStreamReader (s.getInputStream ())); string linha = null; // retorna o arquivo de resposta do servidor while ((line = in.readline ())! = Null) {System.out.println (line);} s.close ();}}Em seguida, comece o Tomcat. Isto é, clique duas vezes no arquivo startup.bat em c: /apache-tomcat-7.0.62/bin. Em seguida, execute o código do cliente acima e você pode ver os dados de resposta retornados pelo Tomacat:
Resumir
O exposto acima é o exemplo completo de código da comunicação TCP neste artigo sobre programação de rede Java, e espero que seja útil para todos. Amigos interessados podem continuar se referindo a este site:
O básico da programação da rede Java: comunicação unidirecional
Código de amostra para implementar a comunicação de soquete em programação multithreaded Java
Explicação detalhada do Código de Modelo de Consumidor do Produtor de Comunicação de Tópico e mecanismo de despertar de espera de Java multi-threaded
Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!