一個例子加深對servlet與tcp協議的理解
阿新 • • 發佈:2017-06-22
puts 一個 .com images 發送信息 mage 交流 tcp協議 host
理解一下servlet
Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。
理解一下TCP/IP協議
TCP/IP不是一個協議,而是一個協議族的統稱。裏面包括了IP協議,IMCP協議,TCP協議,以及我們更加熟悉的http、ftp、pop3協議等等。電腦有了這些,就好像學會了外語一樣,就可以和其他的計算機終端做自由的交流了。
通過代碼加深一下印象。
客戶端代碼Client.java
package com.java.tcp; import java.io.BufferedReader;View Codeimport java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; import com.java.util.PrintUtil; public class Client { public static void main(String[] args) {try { Socket socket = new Socket("localhost",8888); //向服務端輸出 OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream); String clientName = Integer.toString( (int)(Math.random()*100) ); printWriter.print("服務端你好,我是客戶端"+clientName+",今天天氣不錯啊"); printWriter.flush(); socket.shutdownOutput(); //獲取客戶端信息 InputStream inputStream = socket.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String temp = null; StringBuilder info = new StringBuilder(); while( (temp = bufferedReader.readLine()) !=null ) { info.append(temp); } PrintUtil.show("服務端說:"+info); socket.shutdownInput(); //關閉流對象等 printWriter.close(); outputStream.close(); bufferedReader.close(); inputStreamReader.close(); inputStream.close(); socket.close(); } catch (UnknownHostException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } catch (IOException e) { // TODO 自動生成的 catch 塊 e.printStackTrace(); } } }
服務端代碼ServerThread.java
import com.java.util.PrintUtil; public class ServerThread extends Thread { private Socket socket; public ServerThread(Socket socketIn) { this.socket = socketIn; } public void run() { try { //讀取客戶端的信息 InputStream inputStream = socket.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String temp = null; StringBuilder infoBuilder = new StringBuilder(); while((temp = bufferedReader.readLine()) !=null) { infoBuilder.append(temp); } PrintUtil.show("已經接收到客戶端的連接"); PrintUtil.show("服務端收到客戶端信息:"+infoBuilder.toString()); PrintUtil.show("服務端地址為:"+socket.getInetAddress().getHostAddress()); socket.shutdownInput(); //向客戶端發送信息 OutputStream outputStream = socket.getOutputStream(); PrintWriter printWriter = new PrintWriter(outputStream); printWriter.print("您好,服務端已經接收到您的信息"); printWriter.flush(); socket.shutdownOutput(); //關閉需要關閉的對象 printWriter.close(); outputStream.close(); bufferedReader.close(); inputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }View Code
服務端代碼Server.java
package com.java.tcp; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import com.java.util.PrintUtil; public class Server { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(8888); PrintUtil.show("---服務端已經啟動,等待客戶端連接---"); while (true) { Socket socket = serverSocket.accept();// 偵聽並接受到此套接字的連接,返回一個Socket對象 ServerThread socketThread = new ServerThread(socket); socketThread.start(); } } catch (IOException e) { e.printStackTrace(); } } }View Code
跑起來的示例
( 寫得粗糙,只做mark,後期再完善 )
一個例子加深對servlet與tcp協議的理解