生活随笔
收集整理的這篇文章主要介紹了
局域网聊天程序 ——灵活使用winsock控件完成局域网数据传输
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、編寫目的:
這兩天本人正在編寫一個局域網(wǎng)游戲,因為第一次編寫這樣的游戲,所以遇見了以前沒有遇到的問題----局域網(wǎng)聯(lián)機(jī)數(shù)據(jù)的傳輸。
二、編寫思路:
首先要清楚整個程序的思路。首先要有主機(jī)端(服務(wù)器端:建立聊天室),再就是需要連接端(客戶端:建立連接),大致思想如圖:
三、熟悉winsock控件
1、? 屬性(本程序里需要的)
| 屬性 | 值 | 作用 |
| Protocol | TCP-----0 UDP----1 | 建立連接前首先需要選擇協(xié)議 |
| LocalPort | 0-45536 | 本地端口 |
| LocalIP | 0.0.0.0-255.255.255.255 | 本地IP |
| RmoteHost | 0.0.0.0-255.255.255.255 | 遠(yuǎn)程IP |
| RmotePort | 0-45536 | 遠(yuǎn)程端口 |
2、方法(重要的)
| 方法 | 格式 | 作用 |
| State | WinSock1.State | 返回winsock1的狀態(tài)(百度去查編號) |
| Close | WinSock1.Close | 斷開連接 |
| Accept | WinSock1.Accept <是否接受連接> | 這個本人理解是:當(dāng)連接端向主機(jī)端請求連接時主機(jī)端確定是否連接。(不明白自己去百度) |
| Getdata | WinSock1.Getdata <變量> | 接受數(shù)據(jù) |
| Senddata | WinSock1.Senddata <變量> | 發(fā)送數(shù)據(jù) |
| Listen | Winsock1.listen | 開始監(jiān)聽局域網(wǎng)(一般用于主機(jī)端) |
3、 事件(本程序中使用)
| Error | 連接錯誤觸發(fā) |
| Sendcomplete | 數(shù)據(jù)完整的發(fā)送后觸發(fā) |
| DataArrival | 數(shù)據(jù)接收時觸發(fā) |
| ComnectionRequest | 被請求時觸發(fā) |
四、界面
五、源碼
Dim pn$ ' 名字
Dim port '房間端口
Dim homeip '房間ip
Dim date1$, data1$Public Sub msg0(s%, e) '控制我的聊天框Static tim0tim0 = sTimer1.Enabled = ePicture2(0).Visible = eEnd SubPrivate Sub Combo2_Click() '聊天詳細(xì)查看MsgBox Combo2.List(Combo2.ListIndex), , "詳細(xì)"End SubPrivate Sub Command1_Click()Dim date1$ '發(fā)送數(shù)據(jù)date1 = Now & " ID:" & pn & vbCrLf & Text1.TextIf Text1.Text <> "" ThenWinsock1.SendData date1Combo2.AddItem date1, 0Combo2.Text = date1End IfEnd SubPrivate Sub Command2_Click(Index As Integer)Select Case IndexCase 0 '創(chuàng)建房間If Command2(0).Caption = "創(chuàng)建聊天室" Thenport = Val(InputBox("請輸入房間號(1-65535)", "創(chuàng)建聊天室", "3333"))If port > 0 And port < 65535 ThenCommand2(0).Caption = "關(guān)閉聊天室"build port '建立端口ElseMsgBox "房間號不合法", , "錯誤"End IfElseCommand2(0).Caption = "創(chuàng)建聊天室"Winsock1.CloseEnd IfCase 1homeip = InputBox("請輸入要連接ip", "加入房間")port = Val(InputBox("請輸入要連接房間號:", "加入房間"))If homeip <> "" And port <> 0 ThenWinsock1.Connect homeip, portForm1.Caption = "已連接"ElseMsgBox "ip房間號不合法", , "錯誤"End IfCase 2If homeip <> "" And port <> 0 ThenWinsock1.Connect homeip, portElseMsgBox "ip房間號不合法", , "錯誤"End IfCase 3If MsgBox("是否斷開連接", vbYesNo, "斷開") = vbYes Then Winsock1.Close: Command2(0).Caption = "創(chuàng)建聊天室"Case 4MsgBox "本地IP/PORT:" & Winsock1.LocalIP & ":" & Winsock1.LocalPort & Chr(13) & "遠(yuǎn)程IP/PORT:" & Winsock1.RemoteHostIP & ":" & Winsock1.RemotePort, , "連接查看"End SelectEnd SubPrivate Sub Form_Load()iniEnd SubPrivate Sub Picture1_DblClick(Index As Integer) '雙擊輸入名字pn = InputBox("你的名字", "請輸入")End SubPrivate Sub Timer1_Timer() '延遲關(guān)閉msgIf tim0 = 0 ThenTimer1.Enabled = FalsePicture2(0).Visible = FalseEnd Iftim0 = tim0 - 1End SubPublic Sub msg1(s%, e) '控制qit的聊天框Static tim1tim1 = sTimer2.Enabled = ePicture2(1).Visible = eEnd SubPrivate Sub Timer2_Timer() '同timer1If tim1 = 0 ThenTimer2.Enabled = FalsePicture2(1).Visible = FalseEnd Iftim1 = tim1 - 1End SubPublic Sub ini() '初始化msg0 0, 0msg1 0, 0For i = 0 To 1Text1.Text = ""Text2(i).Text = ""Nextpn = "DA"End SubPrivate Sub Timer3_Timer() '狀態(tài)檢測Combo1.Text = Winsock1.State & sta(Winsock1.State)Combo1.AddItem Winsock1.State & sta(Winsock1.State), 0End SubPublic Function sta(st) As String '狀態(tài)標(biāo)識Select Case stCase 0sta = "關(guān)閉"Case 1sta = "打開"Case 2sta = "偵聽"Case 3sta = "掛起"Case 4sta = "識別主機(jī)"Case 5sta = "已識別主機(jī)"Case 6sta = "正在連接"Case 7sta = "已連接"Case 8sta = "同級關(guān)閉"Case 9sta = "錯誤"End SelectEnd FunctionPublic Sub build(port) '建立房間,開始監(jiān)聽Winsock1.LocalPort = portWinsock1.ListenForm1.Caption = "房間IP:" & Winsock1.LocalIP & " 房間號:" & portEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal requestID As Long)If Winsock1.State <> 0 ThenWinsock1.CloseWinsock1.Accept requestIDEnd IfEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long)Dim data1$Winsock1.GetData data1Text2(1).Text = ""Text2(1).Text = data1 & "[接收OK]"msg1 10, 1Combo2.AddItem data1, 0Combo2.Text = data1End SubPrivate 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)MsgBox "連接錯誤", "錯誤"End SubPrivate Sub Winsock1_SendComplete()Text2(0).Text = ""Text2(0).Text = Text1.Text & "[發(fā)送OK]"Text1.Text = ""msg0 10, 1End Sub
六、最后
本人用了一下午的時間學(xué)會這個控件,并且編寫了這個軟件。學(xué)習(xí)只有倆點記憶+理解,這要會這倆點,什么都不是問題 。
文檔屬性:學(xué)習(xí)
作者:LHD
總結(jié)
以上是生活随笔為你收集整理的局域网聊天程序 ——灵活使用winsock控件完成局域网数据传输的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。