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) }}
}
下面是業務處理類,支援多執行緒,主要用來處理業務
publicclass 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的解析,解析方式很多,就不再贅述。
下面是客戶端**,以登入為例:
publicclass
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 ...