vb.net制作聊天程序,用vb編寫簡單的程序

vb.net 怎樣用UDP 協(xié)議 寫一個聊天程序???如圖

'xiansr.2014/2/7 vb.net2010 調(diào)試通過

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),博白企業(yè)網(wǎng)站建設(shè),博白品牌網(wǎng)站建設(shè),網(wǎng)站定制,博白網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,博白網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

Imports System.Net

Imports System.Net.Sockets

Imports System.Text

Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Dim udpClient As New UdpClient(11000)

Try

udpClient.Connect("127.0.0.1", 11000)

Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(RichTextBox1.Text)

udpClient.Send(sendBytes, sendBytes.Length)

Dim RemoteIpEndPoint As New IPEndPoint(IPAddress.Any, 0)

Dim receiveBytes As [Byte]() = udpClient.Receive(RemoteIpEndPoint)

Dim returnData As String = Encoding.ASCII.GetString(receiveBytes)

RichTextBox2.Text = "接收到: " + returnData.ToString()

'Debug.Print(("This message was sent from " + RemoteIpEndPoint.Address.ToString() + " on their port number " + RemoteIpEndPoint.Port.ToString()))

udpClient.Close()

Catch ex As Exception

stop

End Try

End Sub

End Class

如何用VB做聊天工具

winsock使用 Winsock 控件 利用 WinSock 控件可以與遠(yuǎn)程計算機(jī)建立連接,并通過用戶數(shù)據(jù)文報協(xié)議 (UDP)或者傳輸控制協(xié)議 (TCP)進(jìn)行數(shù)據(jù)交換。這兩種協(xié)議都可以用來創(chuàng)建客戶與服務(wù)器應(yīng)用程序。與 Timer 控件類似,WinSock 控件在運(yùn)行時是不可見的??赡艿挠猛?創(chuàng)建收集用戶信息的客戶端應(yīng)用程序,并將收集的信息發(fā)送到某中央服務(wù)器。

創(chuàng)建一個服務(wù)器應(yīng)用程序,作為多個用戶的數(shù)據(jù)的匯入點(diǎn)。

創(chuàng)建“聊天”應(yīng)用程序。 選擇通訊協(xié)議 在使用 WinSock 控件時,首先需要考慮使用什么協(xié)議??梢允褂玫膮f(xié)議包括 TCP 和 UDP。兩種協(xié)議之間的重要區(qū)別在于它們的連接狀態(tài): TCP 協(xié)議控件是基于連接的協(xié)議,可以將它同電話系統(tǒng)相比。在開始數(shù)據(jù)傳輸之前,用戶必須先建立連接。

UDP 協(xié)議是一種無連接協(xié)議,兩臺計算機(jī)之間的傳輸類似于傳遞郵件:消息從一臺計算機(jī)發(fā)送到另一臺計算機(jī),但是兩者之間沒有明確的連接。另外,單次傳輸?shù)淖畲髷?shù)據(jù)量取決于具體的網(wǎng)絡(luò)。 到底選擇哪一種協(xié)議通常是由需要創(chuàng)建的應(yīng)用程序決定的。下面的幾個問題將有助于選擇適宜的協(xié)議: 在收發(fā)數(shù)據(jù)的時候,應(yīng)用程序是否需要得到客戶端或者服務(wù)器的確認(rèn)信息?如果需要,使用 TCP 協(xié)議,在收發(fā)數(shù)據(jù)之前先建立明確的連接。

數(shù)據(jù)量是否特別大(例如圖象與聲音文件)?在連接建立之后,TCP 協(xié)議將維護(hù)連接并確保數(shù)據(jù)的完整性。不過,這種連接需要更多的計算資源,因而是比較“昂貴”的。

數(shù)據(jù)發(fā)送是間歇的,還是在一個會話內(nèi)?例如,如果應(yīng)用程序在某個任務(wù)完成的時候需要通知某個計算機(jī),UDP 協(xié)議是更適宜的。UDP 協(xié)議適合發(fā)送少量的數(shù)據(jù)。 協(xié)議的設(shè)置 在設(shè)計時,可以按如下方式設(shè)置應(yīng)用程序使用的協(xié)議:在“屬性”窗口中單擊“協(xié)議”,然后選擇 sckTCPProtocol 或者 sckUDPProtocol。也可以使用程序代碼來設(shè)置 Protocol 屬性,如下所示:Winsock1.Protocol = sckTCPProtocol 確定計算機(jī)的名稱 在與遠(yuǎn)程計算機(jī)相連接的時候,需要知道它的 IP 地址或者它的“好聽的名字”。IP 地址是一串?dāng)?shù)字,每三個數(shù)字為一組,中間用點(diǎn)隔開(形如 xxx.xxx.xxx.xxx)。通常,最易記住的是計算機(jī)的“好聽的名字”。要確定計算機(jī)的名字,請按照以下步驟執(zhí)行: 在計算機(jī)的“任務(wù)欄”上,單擊“啟動”。

在“設(shè)置”項中,單擊“控制面板”。

雙擊“網(wǎng)絡(luò)”圖標(biāo)。

單擊“標(biāo)識”選項卡。

在“計算機(jī)名稱”框中可以找到計算機(jī)的名稱。 上面找到的計算機(jī)名稱可以作為 RemoteHost 屬性的值。TCP 連接初步 如果應(yīng)用程序要使用 TCP 協(xié)議,那么首先必須決定應(yīng)用程序是服務(wù)器還是客戶端。如果要創(chuàng)建一個服務(wù)器端,那么應(yīng)用程序需要“監(jiān)聽”指定的端口。當(dāng)客戶端提出連接請求時,服務(wù)器端能夠接受請求并建立連接。在連接建立之后,客戶端與服務(wù)器端可以自由地互相通訊。下列步驟創(chuàng)建一個非常簡單的服務(wù)器:要創(chuàng)建一個 TCP 服務(wù)器,請按照以下步驟執(zhí)行: 創(chuàng)建新的 Standard EXE 工程。

將缺省窗體的名稱改為 frmServer。

將窗體的標(biāo)題改為“TCP 服務(wù)器”。

在窗體中放入一個 Winsock 控件,并將它的名字改為 tcpServer。

在窗體上添加兩個 TextBox 控件。將第一個命名為 txtSendData,第二個為 txtOutput。

為窗體添加如下的代碼。 Private Sub Form_Load() '將 LocalPort 屬性設(shè)置為一個整數(shù)。 '然后調(diào)用 Listen 方法。 tcpServer.LocalPort = 1001 tcpServer.Listen frmClient.Show '顯示客戶端的窗體。 End Sub Private Sub tcpServer_ConnectionRequest _ (ByVal requestID As Long) '檢查控件的 State 屬性是否為關(guān)閉的。 '如果不是, '在接受新的連接之前先關(guān)閉此連接。 If tcpServer.State sckClosed Then _ tcpServer.Close '接受具有 requestID 參數(shù)的 '連接。 tcpServer.Accept requestID End Sub Private Sub txtSendData_Change() '名為 txtSendData 的 TextBox 控件中 '包含了要發(fā)送的數(shù)據(jù)。當(dāng)用戶往文本框中 '鍵入數(shù)據(jù)時,使用 SendData 方法 '發(fā)送輸入的字符串。 tcpServer.SendData txtSendData.Text End Sub Private Sub tcpServer_DataArrival _ (ByVal bytesTotal As Long) '為進(jìn)入的數(shù)據(jù)聲明一個變量。 '調(diào)用 GetData 方法,并將數(shù)據(jù)賦予名為 txtOutput '的 TextBox 的 Text 屬性。 Dim strData As String tcpServer.GetData strData txtOutput.Text = strData End Sub 上面的步驟創(chuàng)建了一個簡單的服務(wù)器應(yīng)用程序。為了使它能夠工作,還必須為它創(chuàng)建一個客戶端的應(yīng)用程序。要創(chuàng)建 TCP 客戶端,請按照以下步驟執(zhí)行: 在工程中添加一個新的窗體,將其命名為 frmClient。

將窗體的標(biāo)題改為“TCP Client”。

在窗體中添加一個 Winsock 控件,并將其命名為 tcpClient。

在 frmClient 中添加兩個 TextBox 控件。將第一個命名為 txtSend,第二個為 txtOutput。

在窗體上放一個 CommandButton 控件,并將其命名為 cmdConnect。

將 CommandButton 控件的標(biāo)題改為 Connect。

在窗體中添加如下的代碼。 重點(diǎn) 必須將 RemoteHost 屬性值修改為您的計算機(jī)的名字。Private Sub Form_Load() 'Winsock 控件的名字為 tcpClient。 '注意:要指定遠(yuǎn)程主機(jī),可以使用 ' IP 地址(例如:"121.111.1.1"),也可以使用 '計算機(jī)的“好聽的名字”如下所示。 tcpClient.RemoteHost = "RemoteComputerName" tcpClient.RemotePort = 1001 End Sub Private Sub cmdConnect_Click() '調(diào)用 Connect 方法,初始化連接。 tcpClient.Connect End Sub Private Sub txtSendData_Change() tcpClient.SendData txtSend.Text End Sub Private Sub tcpClient_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String tcpClient.GetData strData txtOutput.Text = strData End Sub 上面的代碼創(chuàng)建了一個簡單的客戶/服務(wù)器模式的應(yīng)用程序。我們可以將兩者都運(yùn)行起來:運(yùn)行工程,然后單擊“連接”。在兩個窗體之一的 txtSendData 文本框中鍵入文本,可以看到同樣的文字將出現(xiàn)在另一個窗體的 txtOutput 文本框中。接受多個連接請求 上面設(shè)計的基本服務(wù)器只能接受一個連接請求。通過創(chuàng)建控件數(shù)組,使用一個控件也可以同時接受多個連接請求。利用這種方法,不需要關(guān)閉連接,而只需創(chuàng)建新的控件實例(通過設(shè)置其索引屬性),然后在新的實例上調(diào)用 Accept 方法。下面的代碼假定名為 sckServer 的窗體上有一個 Winsock 控件,它的 Index 屬性被設(shè)置為 0;因此控件是控件數(shù)組的一部分。在聲明部分,聲明了一個模塊級的變量 intMax。在窗體的 Load 事件中,intMax 被設(shè)置為 0,數(shù)組中第一個控件的 LocalPort 屬性被設(shè)置為 1001。然后調(diào)用控件的 Listen 方法,使之成為“監(jiān)聽”控件。在連接請求到達(dá)時,代碼將檢測 Index 是否為 0(“監(jiān)聽”控件的值)。如果為 0,監(jiān)聽控件將增加 intMax 的值,并使用該號碼來創(chuàng)建新的控件實例。然后,使用新的控件實例接受連接請求。Private intMax As Long Private Sub Form_Load() intMax = 0 sckServer(0).LocalPort = 1001 sckServer(0).Listen End Sub Private Sub sckServer_ConnectionRequest _ (Index As Integer, ByVal requestID As Long) If Index = 0 Then intMax = intMax + 1 Load sckServer(intMax) sckServer(intMax).LocalPort = 0 sckServer(intMax).Accept requestID Load txtData(intMax) End If End Sub UDP 初步 創(chuàng)建 UDP 應(yīng)用程序比創(chuàng)建 TCP 應(yīng)用程序還要簡單,因為 UDP 協(xié)議不需要顯式的連接。在上面的 TCP 應(yīng)用程序中,一個 Winsock 控件必須顯式地進(jìn)行“監(jiān)聽”,另一個必須使用 Connect 方法初始化連接。UDP 協(xié)議不需要顯式的連接。要在兩個控件中間發(fā)送數(shù)據(jù),需要完成以下的三步(在連接的雙方): 將 RemoteHost 屬性設(shè)置為另一臺計算機(jī)的名稱。

將 RemotePort 屬性設(shè)置為第二個控件的 LocalPort 屬性。

調(diào)用 Bind 方法,指定使用的 LocalPort。(下面將詳細(xì)地討論該方法。) 因為兩臺計算機(jī)的地位可以看成“平等的”,這種應(yīng)用程序也被稱為點(diǎn)到點(diǎn)的。為了具體說明這個問題,下面將創(chuàng)建一個“聊天”應(yīng)用程序,兩個人可以通過它進(jìn)行實時的交談。要創(chuàng)建一個 UDP 伙伴,請按照以下步驟執(zhí)行: 創(chuàng)建一個新的 Standard EXE 工程。

將缺省的窗體的名稱修改為 frmPeerA。

將窗體的標(biāo)題修改為“Peer A”。

在窗體中放入一個 Winsock 控件,并將其命名為 udpPeerA。

在“屬性”頁上,單擊“協(xié)議”并將協(xié)議修改為 UDPProtocol。

在窗體中添加兩個 TextBox 控件。將第一個命名為 txtSend,第二個命名為 txtOutput。

為窗體增加如下的代碼。 Private Sub Form_Load() '控件的名字為 udpPeerA With udpPeerA '重點(diǎn):必須將 RemoteHost 的值 '修改為計算機(jī)的名字。 .RemoteHost= "PeerB" .RemotePort = 1001 '連接的端口號。 .Bind 1002 '綁定到本地的端口。 End With frmPeerB.Show '顯示第二個窗體。 End Sub Private Sub txtSend_Change() '在鍵入文本時,立即將其發(fā)送出去。 udpPeerA.SendData txtSend.Text End Sub Private Sub udpPeerA_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerA.GetData strData txtOutput.Text = strData End Sub 要創(chuàng)建第二個 UDP 伙伴,請按照以下步驟執(zhí)行: 在工程中添加一個標(biāo)準(zhǔn)窗體。

將窗體的名字修改為 frmPeerB。

將窗體的標(biāo)題修改為“Peer B”。

在窗體中放入一個 Winsock 控件,并將其命名為 udpPeerB。

在“屬性”頁上,單擊“協(xié)議”并將協(xié)議修改為“UDPProtocol”。

在窗體上添加兩個 TextBox 控件。將第一個命名為 txtSend,第二個命名為 txtOutput。

在窗體中添加如下的代碼。 Private Sub Form_Load() '控件的名字為 udpPeerB。 With udpPeerB '重點(diǎn):必須將 RemoteHost 的值改為 '計算機(jī)的名字。 .RemoteHost= "PeerA" .RemotePort = 1002 '要連接的端口。 .Bind 1001 '綁定到本地的端口上。 End With End Sub Private Sub txtSend_Change() '在鍵入后立即發(fā)送文本。 udpPeerB.SendData txtSend.Text End Sub Private Sub udpPeerB_DataArrival _ (ByVal bytesTotal As Long) Dim strData As String udpPeerB.GetData strData txtOutput.Text = strData End Sub 如果要試用上面的例子,按 F5 鍵運(yùn)行工程,然后在兩個窗體的 txtSend TextBox 中分別鍵入一些文本。鍵入的文字將出現(xiàn)在另一個窗體的 txtOutput TextBox 中。關(guān)于 Bind 方法 在上面的代碼中,在創(chuàng)建 UDP 應(yīng)用程序時調(diào)用了 Bind 方法,這是必須的。Bind 方法的作用是為控件“保留”一個本地端口。例如,如果將控件綁定到 1001 號端口,那么其它應(yīng)用程序?qū)⒉荒苁褂迷摱丝谶M(jìn)行“監(jiān)聽”。該方法阻止其它應(yīng)用程序使用同樣的端口。Bind 方法的第二個參數(shù)是任選的。如果計算機(jī)上存在多個網(wǎng)絡(luò)適配器,可以用 LocalIP 參數(shù)來指定使用哪一個適配器。如果忽略該參數(shù),控件使用的將是計算機(jī)上“控制面板”設(shè)置中“網(wǎng)絡(luò)”控制面板對話框中列出的第一個適配器。在使用 UDP 協(xié)議的時候,可以任意地改變 RemoteHost 和 RemotePort 屬性,同時始終保持綁定在同一個 LocalPort 上。TCP 協(xié)議與此不同,在改變 RemoteHost 和 RemotePort 屬性之前,必須先關(guān)閉連接。

用VB做一個實現(xiàn)互聯(lián)網(wǎng)的連接聊天程序

這個很簡單,一個服務(wù)端和一個客戶端。

我們先畫一個服務(wù)端界面,兩個textbox,一個command,一個winsock,非別為:Text1,text2,command1

text1用于填寫你需要發(fā)送的信息

text2用于顯示接收的信息

command1用于發(fā)送信息

winsock1用于創(chuàng)建連接

客戶端和服務(wù)端的界面一樣。

接下來我們開始寫代碼:

服務(wù)端:

Private Sub Command1_Click()

Dim a As String

Text2.Text = Text2.Text vbCrLf Text1.Text

a = Text1.Text

Winsock1.SendData a

End Sub

Private Sub Form_Load()

Winsock1.Close

Winsock1.LocalPort = 4981 '這里填寫你要監(jiān)聽的端口

Winsock1.Listen '開始監(jiān)聽

End Sub

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)

Winsock1.Close

Winsock1.Accept requestID

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim a As String

Winsock1.GetData a

Text2.Text = Text2.Text vbCrLf a

End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

Winsock1.Close '如果出錯則關(guān)閉連接

End Sub

客戶端:

Private Sub Command1_Click()

Dim a As String

Text2.Text = Text2.Text vbCrLf Text1.Text

a = Text1.Text vbCrLf

Winsock1.SendData a

End Sub

Private Sub Form_Load()

Winsock1.Close

Winsock1.RemoteHost = "wenlvzhao.3322.org" '這里填寫你的靜態(tài)IP或者是動態(tài)域名

Winsock1.RemotePort = 4981 '這里填寫連接的端口

Winsock1.Connect

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim a As String

Winsock1.GetData a

Text2.Text = Text2.Text vbCrLf a

End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)

Winsock1.Close '如果出錯則關(guān)閉連接

End Sub

VB.NET 如何實現(xiàn)局域網(wǎng)內(nèi)即時會話

樓主你好,你所指的那個指令就是"winchat",Windows自帶的局域網(wǎng)聊天工具.使用方法:開始--運(yùn)行--輸入winchat,就可以打開Winchat了.只能實現(xiàn)很簡單的功能,并且是中文,沒什么好介紹的,相信你一看就懂,希望可以幫到你!

ps:你所說的電影是杜拉拉升職記吧?貌似那是用的郵件發(fā)的,不小心點(diǎn)成群發(fā)了~嘿嘿..

網(wǎng)頁名稱:vb.net制作聊天程序,用vb編寫簡單的程序
分享鏈接:http://muchs.cn/article48/phichp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、Google企業(yè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計、網(wǎng)站營銷建站公司

廣告

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

網(wǎng)站托管運(yùn)營