欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

netvbc混合 netvbnet

關于.Net和VB6中Socket的問題

類庫System.Net.Sockets

成都創(chuàng)新互聯(lián)公司專注于太仆寺網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供太仆寺營銷型網(wǎng)站建設,太仆寺網(wǎng)站制作、太仆寺網(wǎng)頁設計、太仆寺網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造太仆寺網(wǎng)絡公司原創(chuàng)品牌,更為您提供太仆寺網(wǎng)站排名全網(wǎng)營銷落地服務。

舉兩個示例

1、服務器端程序(DateTimeServer.vb)

-------------------------------

Imports System

Imports System.Net

Imports System.Net.Sockets

Imports System.Text

Imports System.Threading

Imports System.Globalization

Public Class DateTimeServer

Public Shared Sub Main()

Dim now As Date

Dim strDateLine As String

Dim ASCII As Encoding = Encoding.ASCII

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture

Try

Dim tcpl As New TCPListener(13) '在端口 13 上進行偵聽

tcpl.Start()

Console.WriteLine("正在等待客戶端連接")

Console.WriteLine("按 Ctrl+C 退出...")

While (True)

' 接受將阻塞,直到有人連接

Dim s As Socket = tcpl.AcceptSocket()

' 獲取當前日期和時間,然后將

' 其連接為字符串

now = DateTime.Now

strDateLine = now.ToShortDateString() + " " + now.ToLongTimeString()

' 將該字符串轉(zhuǎn)換為 Byte 數(shù)組并發(fā)送它

Dim byteDateLine() As Byte = ASCII.GetBytes(strDateLine.ToCharArray())

s.Send(byteDateLine, byteDateLine.Length, SocketFlags.None)

s.Close()

Console.WriteLine("已發(fā)送 {0}", strDateLine)

End While

Catch socketError As SocketException

If (socketError.ErrorCode) = 10048 Then

Console.WriteLine("連接到此端口失敗。有另一臺服務器正在此端口上偵聽。")

End If

End Try

End Sub

End Class

2、客戶端獲取服務器端的時間(Client.vb)

Imports System

Imports System.IO

Imports System.Net

Imports System.Net.Sockets

Imports System.Text

Public Class Client

Public Shared Sub Main()

Dim tcpc As New TCPClient()

Dim read(35) As Byte

Dim args As String() = Environment.GetCommandLineArgs()

If (args.Length 2) Then

Console.WriteLine("請在命令行中指定服務器名稱")

Exit Sub

End If

Dim server As String = args(1)

' 驗證服務器是否存在

Try

DNS.GetHostByName(server)

Catch

Console.WriteLine("無法找到服務器:{0}", server)

Exit Sub

End Try

' 嘗試連接到服務器

tcpc.Connect(server,13)

' 獲取流

Dim s As Stream

Try

s = tcpc.GetStream()

Catch exc As InvalidOperationException

Console.WriteLine("無法連接到服務器:{0}", server)

Exit Sub

End Try

' 讀取流并將其轉(zhuǎn)換為 ASCII

Dim bytes As Integer = s.Read(read, 0, read.Length)

Dim Time As String = Encoding.ASCII.GetString(read)

' 顯示數(shù)據(jù)

Console.WriteLine("已接收到 {0} 個字節(jié)", bytes)

Console.WriteLine("當前的日期和時間為:{0}", Time)

tcpc.Close()

' 等待用戶響應以退出

Console.WriteLine("按 Return 鍵退出")

Console.Read()

End Sub

End Class

3、將這兩個文件保存,然后進入.net提供的編譯工具---Visual Studio .NET 2003 命令提示

vbc.exe /target:exe /out:DateTimeServer.exe /r:System.dll DateTimeServer.vb

vbc.exe /target:exe /out:Client.exe /r:System.dll Client.vb

編譯成功后,生成兩個exe文件,打開服務器端的DateTimeServer.exe程序,用于監(jiān)聽客戶端的請求

在MS-DOS命令行中敲入命令Client.exe Localhost

就可以看到效果了

為什么進程里一出現(xiàn)vbc.exe時,帶有VBA

1、VBC.EXE是VBE編輯器,可能你的EXCEL有問題了

2、vbc.exe在xp的路徑是C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727。如果是VBE編輯器,沒理由出現(xiàn)在這個文件夾位置。出現(xiàn)在這個位置都是與.net有關的東西。

3、VBE沒有單獨的進程,還是在EXCEL.EXE里。

4、應該是.NET的東東了。是SYSTEM的進程了,不是你打開的。

一文搞清到底什么是 NET

其實幾句話就能搞清楚.net。

我們知道我們使用C#/VB寫的代碼是源碼,如果這個源碼你寫在記事本中也是一樣的。

然后使用csc.exe/vbc.exe把你的源碼編譯。生成的文件就是IL文件(可能為dll或exe后綴的)。

事實上,我們?nèi)绻谟浭卤緦懯且粯拥模@個記事本叫編輯器,你需要一句句地把代碼寫出來。如果我們記事本象notepad+一樣能帶一個高亮語法的標識多好?當然了,如果能有自動補全更好(一個關鍵詞或聲明的變量之類的,打出幾個字母就提示出來,我們可以提高輸入速度的,錄入速度與打字速度這里有區(qū)別了,很多程序員以為自己輸入速度很高,進而以為自己的打字速度很高,其實不是我經(jīng)常說程序打字速度并不快不需要機械鍵盤就是因為這個,并不是說輸入速度低),這些功能都加上,就是VS(vs其實是一個IDE,開發(fā)集成工具,而編輯器就是其中一個,智能感智——自動補全功能加強版,高亮顯示等都是編輯器的插件被集成進來),而模板(自動給你增加using代碼與部分文件名稱等等)則是把常用的一些句子先給你輸入好,等等集合起來,就把編輯這部分完成了。

當然了,你安裝完之后會看到類似于csc.exe與vbc.exe這類的編譯器的,它可以把你的源碼(文本)編譯成IL語言。不幸的是csc/vbc的參數(shù)太多了,輸出輸入選項等等,誰也記不住啊,所以根據(jù)文本組織,自動生成一個csc參數(shù)使用的命令多好?嗯,想法不錯的,這就是VS中另一個功能,他所謂有的編譯F6等等都是按你的項目組織自動生成一條編譯指令來調(diào)用編譯器(csc編譯c#的,vbc編譯vb的),VS不但可以自已選擇合適的編譯器(根據(jù)后綴名),而且對于項目中某個參數(shù),自動調(diào)用csc.

好了,怎么把源碼變成IL呢?這里要用到一個東西,我們叫.net framework,不要把framework理解成模板,不要以為你選擇.net framework版本之后可以選擇不同的模板,其實它才是把源碼變成IL的標準——模板不同是因為針對于不同的語法糖進行不同的翻譯。比如一個例子using語句塊其實就是try-finally塊,不同的framework中使用不同的類庫與語法糖。換句話來說,開發(fā)中所增加的都是使用基本類庫與語法糖的增加。

比如.net framework 4.5中存在一個運算符,(?.)運算,它就會在.net framework 4.5時會映射到正確的IL語言。而在.net framework 4.0中卻不會認識該運算符。當然了 vari?.Attribute1與.net framework 4.0中vari==null?null:vari.Attribute1的結(jié)果是一樣的。雖然.net framework 4.5比4.0增加了不少的東西,它其實只是方便了你寫的源碼,IL指令并沒有任何的增加!

所以呢每當.net framework版本增加時,其實只變化了一些我們編碼時的語法或語法糖而已!并附帶送給我們幾個模板或新開發(fā)幾個模板而已。比如MVC/web api等等模板。

說完了生成,現(xiàn)在再說一下IL是怎么運行的,IL其實并不能直接運行,我們需要一個標準把IL再"映射“成可運行的二進制(機器語言),源碼”映射“成IL使用的是.net framework,而IL映射成二進制需要的是.net,不同的是我們把源碼”映射“IL叫編譯,使用的是.net framework,也叫編譯態(tài),而IL映射成二進制并運行,這個叫運行態(tài)。所以我們稱兩個的區(qū)別一個叫開發(fā)環(huán)境,一個叫運行環(huán)境。如果按照正常的理解,其實我們一個用的是.net framework 4.X,運行時我們安裝的dotnet4f,是運行環(huán)境。

運行環(huán)境的虛擬機就是為了把IL映射成二進制(Native Image),而且我們會保存起來,當然了,下次使用相同的IL時,直接使用Native Image中已保存的,不再執(zhí)行翻譯了,這個就是運行時的機制。

大多數(shù)時間很多人把開發(fā)環(huán)境與運行環(huán)境弄混了,為什么呢?因為我們開發(fā)時避免不了要測試及運行,所以開發(fā)環(huán)境包含了運行環(huán)境(你安裝.net framework時同時會安裝運行環(huán)境),而不需要開發(fā)的人員比如如使用windows 10中已經(jīng)安裝了部分的.net 運行環(huán)境支持,所以他們也不需要了解這個東西。只在在出現(xiàn)類似.net framework 4.0在vista版本中運行時,就需要給vista非開發(fā)機安裝.net framework運行版本。否則不需要。所以很多人把開發(fā)環(huán)境與運行環(huán)境混在一起理解了。

事實上,.net framework 2.0/3.5開發(fā)的軟件,生成了IL標準都是2.0的,所以我們只需要2.0的運行環(huán)境。而.net 4.0及4.x.y都使用的是.net 4.0的運行環(huán)境。

說白了,.net有開發(fā)版本,而framework相當于編譯時使用的標準。而IL的標準則是MSIL,也叫是我們常說的CLS,而把運行態(tài)叫CLR(公共語言運行時)是虛擬機要執(zhí)行的標準。

所以,其概況非常簡單,.net支持多種語言,多種語言都是可以生成IL依賴于不同的編譯器,比如csc/vbc等。可以讓不同的語言開發(fā)者在同平臺下工作。而IL(中間語言)再由虛擬機在不同的機器上翻譯成不同的機器語言,保證了其移植性。包括現(xiàn)在支持的linux新標準也是如此方式。跨平臺則使用是native image方式。

分清這兩個步驟,那么.net就沒有什么神密的了。

告訴你幾個事實,有助于理解問題。

C#生成的IL可以被反射成VB語法!當然反向也可以!Red gate的reflector已被MS收購。可以試試的,原來的ILDism已被基本放棄了!它是早期做為VS的插件工具出現(xiàn)的。當然ILSpy也是不錯的,那只是一個反射工具而已。請細想為什么C#生成的IL可以反射成VB語言(反射的準確度與各家軟件的功能有一定的關系)00

.net framework 4.0的生成的IL可以被反射成4.7.2的語法!想想這是為什么?如果你運行環(huán)境與編譯環(huán)境搞混的話,假定IL中也有4.7.2的運行環(huán)境,那么怎么可能版本之間相互反射?但是,.net 2.0生成的IL反射成.net 4.0會存在問題,.net 4.0生成的IL反射成2.0會會現(xiàn)很多錯誤!其實.net 4.0并不包含.net 2.0的語法集,所以這兩個運行版本并不兼容,反射軟件只會把相同的部分反射出來,不同的部分就難以反映了!.net 2.0反射4.0的結(jié)果要好點,這是因歸功于.net framework為了降低學習成本,有一定的連續(xù)性,但是這種連續(xù)性在高版中部分.開發(fā)使用的C#語法被放棄(放棄與清除是不同的,放棄還能反射出來,清除的卻無法再反射了)。

搞清這些就能搞清楚.net的兩段三步(兩段開發(fā)段/運行段,三步,源碼語法(C#/VB),IL語法(MSIL), 二進制(可運行的機器語言))。

本文題目:netvbc混合 netvbnet
本文網(wǎng)址:http://chinadenli.net/article0/hpeeoo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供云服務器微信公眾號App設計網(wǎng)站收錄小程序開發(fā)品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設網(wǎng)站維護公司