1. 程式人生 > >一個例子加深對servlet與tcp協議的理解

一個例子加深對servlet與tcp協議的理解

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;
import 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(); } } }
View Code

服務端代碼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協議的理解