我们先画一个服务端界面,两个textbox,一个command,一个winsock,非别为:Text1,text2,command1
text1用于填写你需要发拍腊烂送的信息
text2用于显示接收的信息
command1用于发送信息
winsock1用于创建连接
客户端和服务端的界袭漏面一样。
接下来我们开始写代码:
服务端:
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 '这里填写你要监听的端口
Winsock1.Listen '开始监听
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 '如果出错则关闭连接
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" '这里填写你的静态IP或者是动态域名
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 '如果出错则关闭连接
End Sub
用做一个好点的聊天不容易.给你介绍一个最简单聊天程序吧.使用时,两个人同时打开,把两者的本机端口和远程端口设置为刚好相反.
Option Explicit
Private IgnoreText As Boolean
'----------------------各控件说明----------------------------
'--名称-------------类型---------------作用------------------
'frmMain Form CHAT主窗体
'Winsock1 Winsock 连接控件
'Label1 Label CONNECT WITH IP标签
'Label2 Label LOCAL PORT标签
'Label3 Label REMOTE PORT标签
'txtRemoteIP TextBox 远程IP地址输入框
'txtLocalPort TextBox 本地PORT输入框
'txtRemotePort TextBox 远程PORT输入框
'cmdConnect CommandButton 连接CONNECT按钮
'Label4 Label Type your text and hit Enter to send it.标签
'Frame1(remoteip) Frame REMOTE IP 框架
'Frame2(host ip) Frame HOST IP 框架
'Text1 TextBox 显示对方(远程主机)发送的CHAT内容
'Text2 TextBox 输入己方(本地主机)要发送的CHAT内容,按ENTER键发送
'cmdClear CommandButton 清空输入框(TEXT2)和显示框(TEXT1)中的内容
'StatusBar1 StatusBar 状态栏
'当郑坦CLEAR按钮按下时,清空TEXT1和TEXT2中的内容
Private Sub cmdClear_Click()
Text1 = ""
With Text2
'清空输入框
.Text = " "
'并把焦点置于TEXT2
.SetFocus
End With
End Sub
'当CONNECT按钮按下时,进行以下 *** 作
Private Sub cmdConnect_Click()
On Error GoTo ErrHandler
With Winsock1
'设置 RemoteHost 属性
.RemoteHost = Trim(txtRemoteIP)
'设置 RemotePort 属性
'RemotePort 属性芹敏的值应该等于 远程主机上的 LocalHost 属性的值
.RemotePort = Trim(txtRemotePort)
'LocalPort 属性的值是不能改变的,必须检查它是否已经被设置
'如果 LocalPort 属性为空(没有被设置),将其设为在LocalPort输入框中输入的数值
If .LocalPort = Empty Then
.LocalPort = Trim(txtLocalPort)
Frame2.Caption = .LocalIP
'这是必须的,Bind 方法的作用是为控件“保留”一个本地端口,防止被其他用户调用。
.Bind .LocalPort
End If
End With
'为了保证使用者不能改变LocalPort的嫌丛枝值,将txtLocalPort输入框锁定
txtLocalPort.Locked = True
'在状态栏中显示“正在连接”的状态
StatusBar1.Panels(1).Text = " 正在连接 " &Winsock1.RemoteHost &" "
'如果连接正常,做以下设置
Frame1.Enabled = True
Frame2.Enabled = True
Label4.Visible = True
Text2.SetFocus
Exit Sub
'如果在连接过程中出现错误,则转向ErrHandler:,并显示错误提示
ErrHandler:
MsgBox "连接远程主机失败!", vbCritical
End Sub
'当窗体加载时显示提示信息并在 txtRemoteIP 框中显示本地主机的IP
Private Sub Form_Load()
Show
txtRemoteIP = Winsock1.LocalIP
End Sub
Private Sub Label5_Click()
End Sub
'接收TEXT2输入框的按键,并做响应
Private Sub Text2_KeyPress(KeyAscii As Integer)
'定义变量 Last_Line_Feed 来记录最后输入行的位置
Static Last_Line_Feed As Long
'定义 New_Line 字符串记录新键入的一行文本的内容
Dim New_Line As String
'如果使用者按下CLEAR按钮对输入框内容清空,这时TEXT2为空,则重设最后输入行的位置为0
If Trim(Text2) = vbNullString Then Last_Line_Feed = 0
'当使用者按下ENTER键时
If KeyAscii = 13 Then
'取得最后输入行的内容并赋值给 New_Line 字符串
New_Line = Mid(Text2, Last_Line_Feed + 1)
'重设最后输入行的位置
Last_Line_Feed = Text2.SelStart
'通过 WINSOCK 发送新输入的一行文本的内容
Winsock1.SendData New_Line
'在状态栏显示发送信息
StatusBar1.Panels(2).Text = " 发送 " &(LenB(New_Line) / 2) &" 字节 "
End If
End Sub
Private Sub txtRemoteIP_Change()
End Sub
'当 WINSOCK 接收到新的数据(信息)时,进行以下响应
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
'定义 New_Text 字符串来记录新接收的信息
Dim New_Text As String
'接收信息并赋值给 New_Text
Winsock1.GetData New_Text
'在TEXT1显示框中显示新接收到的信息
Text1.SelText = New_Text
Frame1.Caption = Winsock1.RemoteHostIP
'在状态栏中显示接收信息
StatusBar1.Panels(2).Text = " 接收到 " &bytesTotal &" 字节 "
End Sub
用Winsock 实现聊天的程序 一个简单的聊天程序 程序所需控卖脊件:Winsock控件,CommandButton控件(默认name),TextBox控件(一个名称为txtMess,另一个名称为txtSend) 程序代码如下: Private Sub Form_Load() Dim my As String Winsock1.Protocol = sckUDPProtocol '设置为UDP协义 Winsock1.LocalPort = 10 '设置计算机的端口,随便设置,不过两个要一样 Winsock1.RemotePort = 10 my = Winsock1.LocalIP '取中游渗得自己的IP地址,是不要的 Winsock1.RemoteHost = my '这里应该是设磨扮置为别人计算机的IP地址,由于自己是单机,所以就设置成自己的,自己给自己发信息 End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) '取得数据时发生 Dim Tmp As String Winsock1.GetData Tmp, vbString '取得数据 Tmp = "对方位址:" + Winsock1.RemoteHostIP + "发言内容为-->" + Tmp txtMess.Text = Tmp + Chr$(13) + Chr$(10) + txtMess.Text End Sub Private Sub Command1_Click() '发送信息 Winsock1.SendData txtSend.Text End Sub 补充:若是想要同時多人聊天的话,则你的RemoteHost 需要将最后面的地址设置为255(广播节点)才行欢迎分享,转载请注明来源:内存溢出
评论列表(0条)