網(wǎng)絡(luò)培訓(xùn)的網(wǎng)站建設(shè)搜索引擎優(yōu)化要考慮哪些方面
一、注意事項:
- ?NetworkStream 是穩(wěn)定的,面向連接的,所以它只適合 TCP 協(xié)議的環(huán)境下工作所以一旦在 UDP環(huán)境中,雖然編譯不會報錯,但是會跳出異常。
- 如果用構(gòu)造產(chǎn)生NetworkStream的實例,則必須使用連接的Socket,例如:
TcpClient tcpClient = new TcpClient(serverIp,port);//創(chuàng)建并發(fā)起連接 NetworkStream stream = tcpClient.GetStream();//如果斷開連接了則此處會有問題
- 如果該NetworkStream擁有對Socket的所有權(quán),則在使用NetworkStream的Close方法時會同時關(guān)閉 Socket,否則關(guān)閉 NetworkStream 時不會關(guān)閉 Socket。以下stream持有socket的所有圈,由于使用了using,當(dāng)ReadMessage結(jié)束后,會銷毀stream同時關(guān)閉Socket連接。
TcpClient tcpClient = new TcpClient(serverIp,port); NetworkStream stream = tcpClient.GetStream(); using (stream) {ReadMessage(stream); }
- NetworkStream 使用后不會自動關(guān)閉提供的socket,必須使用 NetworkStream 構(gòu)造函數(shù)時指定 Socket 所有權(quán)(NetworkStream 的構(gòu)造函數(shù)中設(shè)置)。
二、NetworkStream 的屬性
- CanSeek:用于指示流是否支持查找,它的值始終為false
- DataAvailable 指示:要讀取的 NetworkStream 上是否有可用的數(shù)據(jù),一般來說通過判斷這個屬性來判斷NetworkStream中是否有數(shù)據(jù)
- Length:NetworkStream 不支持使用 Length 屬性,強行使用會發(fā)生NotSupportedException 異常
- Position:NetworkStream 不支持使用 Position 屬性,強行使用會發(fā)生NotSupportedException 異常。
三、NetworkStream的方法
同樣,NetworkStream的方法大致重寫或繼承了Stream的方法但是以下方法必須注意:
1、int Read(byte[] buffer,int offset,int size)
該方法將數(shù)據(jù)讀入buffer參數(shù)并返回成功讀取的字節(jié)數(shù)。如果沒有可以讀取的數(shù)據(jù),則Read方法返回0。Read 操作將讀取盡可能多的可用數(shù)據(jù),直至達(dá)到由size 參數(shù)指定的字節(jié)數(shù)為止。如果遠(yuǎn)程主機(jī)關(guān)閉了連接并且已接收到所有可用數(shù)據(jù),Read 方法將立即完成并返回零字節(jié)。
2、void Write(byte[] buffer, int offset,int size)
Write 方法在指定的 offset 處啟動,并將 buffer 內(nèi)容中的 size 字節(jié)發(fā)送到網(wǎng)絡(luò)。Write方法將一直處于阻止?fàn)顟B(tài)(可以用異步解決),直到發(fā)送了請求的字節(jié)數(shù)或引發(fā) SocketException 為止。如果收到 SocketException,可以使用SocketException.ErrorCode 屬性獲取特定的錯誤代碼。