您现在的位置是: 首页 > 电脑故障 电脑故障

_winsock connect 没反应

tamoadmin 2024-08-13 人已围观

简介1.VB发送封包代码(请大神修改一下)把下面的代码复制下来,保存为"frmServer.frm"VERSION 5.00Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"Begin VB.Form frmServer Caption = "TCP 服务器" ClientHeig

1.VB发送封包代码(请大神修改一下)

_winsock connect 没反应

把下面的代码复制下来,保存为"frmServer.frm"

VERSION 5.00

Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"

Begin VB.Form frmServer

Caption = "TCP 服务器"

ClientHeight = 4470

ClientLeft = 60

ClientTop = 345

ClientWidth = 6015

LinkTopic = "Form1"

ScaleHeight = 4470

ScaleWidth = 6015

StartUpPosition = 3 '窗口缺省

Begin VB.TextBox txtOutput

Height = 2415

Left = 240

Locked = -1 'True

MultiLine = -1 'True

TabIndex = 1

Top = 120

Width = 5175

End

Begin VB.TextBox txtSendData

Height = 1455

Left = 240

MultiLine = -1 'True

TabIndex = 0

Top = 2760

Width = 5175

End

Begin MSWinsockLib.Winsock tcpServer

Left = 5520

Top = 360

_ExtentX = 741

_ExtentY = 741

_Version = 393216

End

End

Attribute VB_Name = "frmServer"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Private Sub Form_Load()

'将 LocalPort 属性设置为一个整数。

'然后调用 Listen 方法。

tcpServer.LocalPort = 1001

tcpServer.Listen

frmClient.Show '显示客户端的窗体。

End Sub

Private Sub tcpServer_ConnectionRequest _

(ByVal requestID As Long)

'检查控件的 State 属性是否为关闭的。

'如果不是,

'在接受新的连接之前先关闭此连接。

If tcpServer.State <> sckClosed Then _

tcpServer.Close

'接受具有 requestID 参数的

'连接。

tcpServer.Accept requestID

End Sub

Private Sub txtSendData_Change()

'名为 txtSendData 的 TextBox 控件中

'包含了要发送的数据。当用户往文本框中

'键入数据时,使用 SendData 方法

'发送输入的字符串。

tcpServer.SendData txtSendData.Text

End Sub

Private Sub tcpServer_DataArrival _

(ByVal bytesTotal As Long)

'为进入的数据声明一个变量。

'调用 GetData 方法,并将数据赋予名为 txtOutput

'的 TextBox 的 Text 属性。

Dim strData As String

tcpServer.GetData strData

txtOutput.Text = strData

End Sub

把下面的代码复制下来.保存为"frmClient.frm"

VERSION 5.00

Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX"

Begin VB.Form frmClient

Caption = "TCP Client"

ClientHeight = 3870

ClientLeft = 60

ClientTop = 375

ClientWidth = 7425

LinkTopic = "Form1"

ScaleHeight = 3870

ScaleWidth = 7425

StartUpPosition = 3 '窗口缺省

Begin VB.CommandButton cmdConnect

Caption = "Connect"

Height = 540

Left = 6000

TabIndex = 2

Top = 1080

Width = 5

End

Begin VB.TextBox txtOutput

Height = 2175

Left = 240

Locked = -1 'True

MultiLine = -1 'True

TabIndex = 1

Top = 240

Width = 5535

End

Begin VB.TextBox txtSendData

Height = 5

Left = 240

MultiLine = -1 'True

TabIndex = 0

Top = 2640

Width = 5535

End

Begin MSWinsockLib.Winsock tcpClient

Left = 6600

Top = 120

_ExtentX = 741

_ExtentY = 741

_Version = 393216

End

End

Attribute VB_Name = "frmClient"

Attribute VB_GlobalNameSpace = False

Attribute VB_Creatable = False

Attribute VB_PredeclaredId = True

Attribute VB_Exposed = False

Private Sub Form_Load()

'Winsock 控件的名字为 tcpClient。

'注意:要指定远程主机,可以使用

' IP 地址(例如:"121.111.1.1"),也可以使用

'计算机的“好听的名字”如下所示。

tcpClient.RemoteHost = "127.0.0.1"

tcpClient.RemotePort = 1001

End Sub

Private Sub cmdConnect_Click()

'调用 Connect 方法,初始化连接。

tcpClient.Connect

End Sub

Private Sub txtSendData_Change()

tcpClient.SendData txtSendData.Text

End Sub

Private Sub tcpClient_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

tcpClient.GetData strData

txtOutput.Text = strData

End Sub

把下面的代码复制下来.保存为"Project1.vbp"

Type=Exe

Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation

Object={F6125AB1-8AB1-11CE-A77F-08002B2F4E98}#2.0#0; MSRDC20.OCX

Object={BDC217C8-ED16-11CD-956C-0000C04E4C0A}#1.1#0; TABCTL32.OCX

Object={5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0; MLXGRD.OCX

Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX

Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX

Object={86CF1D34-0C5F-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCT2.OCX

Object={48E59290-9880-11CF-54-00AA00C00908}#1.0#0; MSINET.OCX

Object={3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0; RICHTX32.OCX

Object={65E121D4-0C60-11D2-A9FC-0000F8754DA1}#2.0#0; MSCHRT20.OCX

Object={248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0; MSWINSCK.OCX

Object={20C62CAE-15DA-101B-B9A8-444553540000}#1.1#0; MSMAPI32.OCX

Object={C1A8AF28-1257-101B-8FB0-0020AF039CA3}#1.1#0; MCI32.OCX

Object={27395F88-0C0C-101B-A3C9-08002B2F49FB}#1.1#0; PICCLP32.OCX

Object={6FBA474E-43AC-11CE-9A0E-00AA0062BB4C}#1.0#0; SYSINFO.OCX

Object={648A5603-2C6E-101B-82B6-000000000014}#1.1#0; MSCOMM32.OCX

Object={C932BA88-4374-101B-A56C-00AA003668DC}#1.1#0; MSMASK32.OCX

Object={CDE57A40-8B86-11D0-B3C6-00A0C90AEA82}#1.0#0; MSDATGRD.OCX

Object={F0D2F211-CCB0-11D0-A316-00AA00688B10}#1.0#0; MSDATLST.OCX

Object={38911DA0-E448-11D0-84A3-00DD01104159}#1.1#0; COMCT332.OCX

Object={673AA1-7FB1-11D0-B148-00A0C922E820}#6.0#0; MSADODC.OCX

Object={0ECD9B60-23AA-11D0-B351-00A0C9055D8E}#6.0#0; MSHFLXGD.OCX

Form=frmServer.frm

Form=frmClient.frm

IconForm="frmServer"

Startup="frmServer"

Command32=""

Name="Project1"

HelpContextID="0"

CompatibleMode="0"

MajorVer=1

MinorVer=0

RevisionVer=0

AutoIncrementVer=0

ServerSupportFiles=0

VersionCompanyName="Company"

CompilationType=0

OptimizationType=0

ForPentiumPro(tm)=0

CodeViewDebugInfo=0

NoAliasing=0

BoundsCheck=0

OverflowCheck=0

FlPointCheck=0

FDIVCheck=0

UnroundedFP=0

StartMode=0

Unattended=0

Retained=0

ThreadPerObject=0

MaxNumberOfThreads=1

DebugStartupOption=0

[MS Transaction Server]

AutoRefresh=1

这三个文件就是工程文件了.源代码就在里面.

VB发送封包代码(请大神修改一下)

我这里有一个简单的聊天室程序:包括服务器和客户端

用VB的winsock实现的,需要跟我联系就是,免费赠送。

QQ361656515

网络编程——聊天室(代码如下)

本程序是基于VB开发环境中Winsock控件的应用,遵循TCP/IP协议,利用该控件的套接字功能,实现远程计算机之间数据通信的,它由服务器和客户端组成。服务器用于连接多个客户端,可以统计已经连接过服务器的人数和服务器当前的在线人数,并负责收发各客户发送的消息,实现多个客户之间实时、准确、无误的数据通信。该程序可以连接1000个客户端,而如果要增减可供连接的客户端,只需对源程序的客户上限稍加改动即可。

工作原理

服务器:运行时声明一组Winsock控件数组,只创建该数组的第一个数组元素并从9999端口开始侦听(listen),当有客户端连接第一个Winsock控件并且连接成功时,触发Winsock_ConnectRequest(),端口数(Localport)递减1单位,此时运用Load Winsock(i)方法创建下一个Winsock控件数组元素并让它开始侦听,继续等待新客户端的连接,如此往复。当连接人数达到既定的客户端上限时,服务器便停止创建新的Winsock控件数组元素,停止侦听,即停止连接客户。服务器与客户端连接成功之后,通过Winsock的DataArrival()、SendData和GetData方法来实现数据的发送和接收。服务器中用一个Locked属性设定为True的文本框来记录所有客户发送的消息(聊天记录)。

客户端:运行时只创建一个Winsock控件,从9999开始递减依次指定Winsock的远程端口并依次连接远程服务器,一旦连接成功就停止指定端口,且由此可以开始和服务器通信。

用一个Locked属性设定为True的文本框来记录所有客户发送的消息,用一个可编辑的文本框来输入客户要发送的消息,这样就基本实现了聊天室的功能。

程序代码

服务器:

Option Explicit

Dim guest As Integer '在线客户数量计数器

Dim j As Integer '已接客户数量计数器

Dim k As Integer '向在线客户发送消息数量计数器

Dim t As Integer '关闭服务器时向在线客户发送消息数量计数器

Dim port As Integer '端口计数器

Dim msg As String '收发的消息文本

Dim newguest As Integer '新客户连接

Private Sub Form_Load()

If App.PrevInstance Then MsgBox "对不起!您已经创建了一个服务器^_^": End

j = 0

guest = 0

port = 9999

Text2 = Winsock1(0).LocalIP

Label3.Caption = "在线人数:" & guest

Label4.Caption = "已接人数:" & j

Winsock1(0).LocalPort = port 'Winsock控件数组第一个控件开始侦听

Winsock1(0).Listen

End Sub

Private Sub Form_Unload(Cancel As Integer) '关闭服务器时缓冲,发送断开信号

Cancel = 1

t = 0

Timer2.Enabled = 1

End Sub

Private Sub Timer1_Timer()

On Error Resume Next '错误处理

Winsock1(k).SendData msg '向所有客户发送即时收到的消息

k = k + 1

If k >= j Then Timer1.Enabled = 0

End Sub

Private Sub Timer2_Timer() '向客户发送断开信号

On Error Resume Next

msg = "closewinsock"

Winsock1(t).SendData msg

t = t + 1

If t > j Then End

End Sub

Private Sub Timer3_Timer() '向新客户发送欢迎信息

On Error Resume Next

If k = newguest Then Exit Sub

Winsock1(k).SendData msg

k = k + 1

If k >= j Then Timer3.Enabled = 0

End Sub

Private Sub Winsock1_ConnectionRequest(Index As Integer, ByVal requestID As Long)

On Error Resume Next

Dim onlineperson As String

msg = ""

If Winsock1(Index).State <> sckClosed Then Winsock1(Index).Close '成功连接

Winsock1(Index).Accept requestID

j = j + 1 '统计已接人数

If guest + 1 < 10 Then

onlineperson = "currentonlineperson00" + CStr(guest + 1) + msg

ElseIf guest + 1 < 100 Then

onlineperson = "currentonlineperson0" + CStr(guest + 1) + msg

End If

Winsock1(Index).SendData onlineperson & "您是第" & CStr(j) & "位进入本聊天室的客户^_^" + Chr(13) + Chr(10)

msg = onlineperson & "第" & CStr(j) & "位客户进入了本聊天室" + Chr(13) + Chr(10)

Text1 = Text1 +"第" & CStr(j) & "位客户进入了本聊天室" + Chr(13) + Chr(10)

k = 0

newguest = Index

Timer3.Enabled = 1

Text1.SelStart = Len(Text1)

guest = guest + 1 '统计在线人数

Label3.Caption = "在线人数:" & guest

Label4.Caption = "已接人数:" & j

Load Winsock1(j)

port = port - 1

Winsock1(j).LocalPort = port

Winsock1(j).Listen

End Sub

Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As Long)

On Error Resume Next

Dim i As Integer

Dim onlineperson As String

msg = ""

Winsock1(Index).GetData msg '发送断开信号

If msg = "closewinsock" Then

msg = ""

Winsock1(Index).Close

If guest - 1 < 10 Then

onlineperson = "currentonlineperson00" + CStr(guest - 1)

ElseIf guest < 100 Then

onlineperson = "currentonlineperson0" + CStr(guest - 1)

End If

msg = "第" & CStr(Index + 1) & "位客户已经离开" + Chr(13) + Chr(10)

Text1 = Text1 + msg

msg = onlineperson & "第" & CStr(Index + 1) & "位客户已经离开" + Chr(13) + Chr(10)

Text1.SelStart = Len(Text1)

k = 0

Timer1.Enabled = 1

guest = guest - 1

Label3.Caption = "在线人数:" & guest

Label4.Caption = "已接人数:" & j

Exit Sub

End If

msg = "第" + CStr(Index + 1) + "位客户说:" + msg + Chr(13) + Chr(10)

Text1 = Text1 + msg

Text1.SelStart = Len(Text1)

k = 0

Timer1.Enabled = 1

End Sub

客户端:

Dim linkstate As Boolean '判断连接状态

Dim port As Integer '依次尝试连接的端口

Private Sub Cmdconnect_Click()

On Error Resume Next

Dim t As String

Dim x As String

Dim y As Integer

y = 0

If Len(Text1) = 0 Then Exit Sub '判断输入的IP地址是否合法

For i = 1 To Len(Text1)

If Mid(Text1, i, 1) <> "." Then

t = t + Mid(Text1, i, 1)

x = ""

Else

y = y + 1

x = x + Mid(Text1, i, 1)

t = ""

End If

If Len(t) > 3 Or x = ".." Or Left(Text1, 1) = "." Or Right(Text1, 1) = "." Then

MsgBox "请输入正确的IP地址^_^", vbOKOnly + vbInformation, "连接": Exit Sub

End If

Next i

If y <> 3 Then MsgBox "请输入正确的IP地址^_^", vbOKOnly + vbInformation, "连接": Exit Sub

If Text1 Like "*.*.*.*" Then

If Cmdconnect.Caption = "&Link" Then '用户选择连接

Cmdconnect.Caption = "&Break"

Timer1.Enabled = 1

Text1.Enabled = 0

Else '用户选择中断连接

Label4.Caption = "在线人数:0"

Text2 = Text2 + "连接中断" + Chr(13) + Chr(10)

Text2.SelStart = Len(Text2)

Timer1.Enabled = 0

Text1.Enabled = 1

Text1.SetFocus

Cmdconnect.Caption = "&Link"

Winsock1.SendData "closewinsock"

linkstate = False

port = 9999

Text3.Enabled = False

cmdsend.Enabled = False

End If

End If

End Sub

Private Sub cmdsend_Click()

On Error Resume Next '发送消息

Winsock1.SendData Text3

Text3 = ""

Text3.SetFocus

End Sub

Private Sub Form_Load()

linkstate = False

port = 9999

End Sub

Private Sub Form_Unload(Cancel As Integer)

On Error Resume Next

Winsock1.SendData "closewinsock" '向服务器发送断开信号

Cancel = 1

Timer2.Enabled = 1

End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer) '禁止用户输入非法IP地址

If KeyAscii < 48 Or KeyAscii > 57 Then

If KeyAscii <> 8 And KeyAscii <> 46 Then KeyAscii = 0

End If

End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)

If Text3.Enabled = False Then Exit Sub

If KeyAscii = 13 Then Call cmdsend_Click

Text3 = Text3 + Chr(KeyAscii)

End Sub

Private Sub Text3_KeyPress(KeyAscii As Integer)

If KeyAscii = 13 Then Call cmdsend_Click

End Sub

Private Sub Timer1_Timer() '从9999端口依次尝试连接服务器

If linkstate = True Then Exit Sub

Winsock1.Close

Winsock1.RemoteHost = Text1.Text

Winsock1.RemotePort = port

Winsock1.Connect

port = port - 1

If port < 9000 Then '设置可供连接的端口上限

Timer1.Enabled = 0

Text1.Enabled = 1

Cmdconnect.Caption = "&Link"

port = 9999

MsgBox "无法连接到服务器,请检查网络连接状况", vbOKOnly + vbCritical, "连接"

End If

End Sub

Private Sub Timer2_Timer() '缓冲以发送断开信号

End

End Sub

Private Sub Winsock1_Connect()

port = port + 1

Timer1.Enabled = 0

linkstate = True

Text3.Enabled = 0

cmdsend.Enabled = 0

MsgBox "已经成功连接", vbOKOnly + vbInformation, "连接"

Text3.Enabled = 1

cmdsend.Enabled = 1

Text3.SetFocus

End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim msg As String

Winsock1.GetData msg '接收服务器传来的的数据并进行相应处理

If Left(CStr(msg), 19) = "currentonlineperson" Then

Label4.Caption = "在线人数:" & Str(Val(Mid(CStr(msg), 20, 3)))

msg = Right(CStr(msg), Len(CStr(msg)) - 22)

End If

If CStr(msg) = "closewinsock" Then

Call Cmdconnect_Click

Text2.SelStart = Len(Text2)

Exit Sub

End If

Text2 = Text2 + msg

Text2.SelStart = Len(Text2)

End Sub

Private Sub Command1_Click()

Winsock1.RemoteHost = "203.195.128.203" '此为目标IP地址

Winsock1.RemotePort = "443" '此为目标IP地址的端口

Winsock1.Connect

end sub

Private Sub Winsock1_Connect()

Winsock1.SendData "00 BC 04 10 00 00 00 00 08 86 8E 06 08 86 8E 06"

Winsock1.SendData "08 92 8E 06 08 86 8E 06 08 92 8E 06 08 92 8E 06"

Winsock1.SendData "08 FB 8E 06 08 F5 8E 06 08 91 8E 06 08 86 8E 06"

Winsock1.SendData "08 91 8E 06 08 E9 8E 06 08 8E 06 08 F6 8E 06"

Winsock1.SendData "08 86 8E 06 08 8E 06 08 91 8E 06 08 8E 06"

Winsock1.SendData "08 F8 8E 06 08 94 8E 06 08 EA 8E 06 08 94 8E 06"

Winsock1.SendData "08 94 8E 06 08 85 8E 06 08 85 8E 06 08 85 8E 06"

Winsock1.SendData "08 89 8E 06 08 ED 8E 06 08 89 8E 06 08 89 8E 06"

Winsock1.SendData "08 89 8E 06 08 88 8E 06 08 EC 8E 06 08 8C 8E 06"

Winsock1.SendData "08 8C 8E 06 08 8C 8E 06 08 8C 8E 06 08 8C 8E 06"

Winsock1.SendData "08 EF 8E 06 08 8B 8E 06 08 8B 8E 06 08 8B 8E 06"

End Sub