基於TCP協議的專案架構之Socket流傳輸的實現

2022-09-17 22:12:11 字數 2255 閱讀 6767

tcp是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,在簡化的計算機網路osi模型中,它完成第四層傳輸層所指定的功能,tcp層位於ip層之上,應用層之下的中間層,不同主機的應用層之間經常需要可靠的、像管道一樣的連線,但ip層不需要提供這樣的機制,而是提供不可靠的包交換。當應用層向tcp層傳送用於網間傳輸的、用8位位元組標示的資料流,tcp會把資料流分割為適當長度的報文段,之後tcp把資料報傳給ip層,由它來通過網路將包傳輸給接收端的實體tcp層。tcp是網際網路中的傳輸層協議,使用3次握手協議建立連線。

tcp通訊是嚴格區分客戶端與服務端的,在通訊時,必須先由客戶端去連線伺服器才能實現通訊,伺服器端不可以主動連線客戶端,並且伺服器要事先啟動,等待客戶端的連線。

在jdk中提供了兩個類用於實現tcp程式,乙個是serversocket類,用於表示伺服器,乙個是socket類,用於表示客戶端。通訊時,首先建立代表伺服器端的serversocket物件,該物件相當於開啟乙個服務,並等待客戶端的連線,然後建立代表客戶端的socket物件向伺服器端發出連線請求,伺服器端響應請求,兩者建立連線,開始通訊。

下面是我們通過socket建立的模型,是多執行緒的,首先看服務端**:

/**

* socket服務端

* @author

我心自在 *

*/public

class

main

/*** 主程式入口

* @param

args

*/public

static

void

main(string args) }}

catch

(ioexception e)

finally

if (socket != null

) }

catch

(ioexception e) }}

}

下面是業務處理類,支援多執行緒,主要用來處理業務

public

class controller implements

runnable

public

void

run()

catch

(ioexception e1)

if(fileinfo!=null

) jsonmap=jsonutil.jsontomap(fileinfostring);

requestmethod=(string) jsonmap.get("requestmethod");

if (!(requestmethod==null||"".equals(requestmethod))) }}

catch

(unknownhostexception e)

catch

(ioexception e)

finally

if(ops!=null

)

if(bos!=null

) bis.close();

socket.close();

} catch

(ioexception e) }}

這是乙個完整的socket傳輸框架,基本思想就是,通過輸入流接到客戶端傳送過來的報文,然後進行解析,為什麼統一用位元組流接受呢,這裡由具體的業務流程決定,因為我們的檔案上傳分兩部分,一部分是檔案資訊,一部分是檔案流,所以為了方便,統一使用位元組流接收,根據位元組流中的請求介面方法,呼叫對應的介面方法,完成業務處理。因為客戶端的報文有兩種,一種是xml型別的報文,另外一種是json格式的報文,這裡只貼出了部分json格式的**。差的只是乙個xml的解析,解析方式很多,就不再贅述。

下面是客戶端**,以登入為例:

public

class

logintest

catch

(unknownhostexception e)

catch

(ioexception e)

}

客戶端**非常簡單,基本就是以流的形式傳送報文,傳送到客戶端,完成請求,收到伺服器響應後,關閉連線,完成一次請求。

以上只是乙個簡單的socket通訊模型,可以應用到很多不同的專案。大致思路就是通過socket通訊,獲取客戶端傳送過來的報文,然後對報文進行解析,根據請求方法,呼叫不同的業務介面,處理不同的業務,結合不同的場景,執行不同的操作。

基於tcp協議的socket

serve服務端 import socket sk socket.socket 例項物件 sk.bind 127.0.0.1 8080 集合內設定ip和埠,利用bind方法 sk.listen 監聽資訊 conn,addr sk.accept 接受到資訊 while true ret conn.re...

基於TCP協議的C S通訊

一 環境 os win10 ide visual studio 2010 二 在同一解決方案下新建兩個win32控制台應用程式,專案名分別是server和client,分別在兩個專案的原始檔下新增server.cpp和client.cpp server.cpp include include inc...

基於tcp協議的套接字

簡單版本 一 服務端 import socket 1 買手機 拿到套接字物件,用來鏈結建立鏈結 phone socket.socket socket.af inet,socket.sock stream tcp稱為流式協議sock stream,udp稱為資料報協議sock dgram print ...