实验六: WinSock编程实验报告
1实验目的和要求
1) 学习网络中进程之间通信的原理和实现方法;
2) 掌握在VB或VC++等集成开发环境中编写网络程序的方法;
3)编写一个简单的聊天程序:最低要求实现两人一组的两台计算机之间的收发文本及其显示;
2实验设备及分组
1) Windows2000以上操作系统; 2) VB和Visual C++ 6.0语言环境; 3) 每人一台PC机。
3实验内容和步骤
3.1设计服务器界面
打开vb程序,新建一个工程,取名为server。在窗体中添加控件。将Winsock控件放入到窗体里,名称属性改为Winsockserver。在窗体里建立两个按钮,command1的caption属性为发送,command2的caption属性为退出。建立两个richtextbox,richtextbox1的名称属性改为textget,ScrollBars属性改为3-rtfBoth,Locked属性改为True,richtextbox2的名称属性改为textsend,ScrollBars属性改为3-rtfBoth。然后建立两个label,caption属性改为接受窗口和发送窗口。如图3-1所示。
图3-1 服务器界面
3.2设计客户端界面
先建立一个工程,取名为client。在窗体中加入控件:将Winsock控件添加到窗体里,名称属性改为winsockclient。建立两个richtextbox,richtextbox1的名称属性改为textget,ScrollBars属性改为3-rtfBoth,Locked属性改为True,
richtextbox2的名称属性改为textsend,ScrollBars属性改为3-rtfBoth。在窗体里
建立三个按钮,command1的caption属性为发送,command2的caption属性为退出,command3的caption属性为连接。建立一个text。再建立三个Lable,caption属性分别为主机名,接收和发送,如图3-2所示。
图3-2 客户端界面
3.3编写程序及其说明 3.3.1服务器程序
Private Sub Command1_Click() ’发送选项 Dim a As String a = \服务器:\
Winsockserver.SendData \
textget.Text = textget.Text & a & \vbCrLf ‘可自动换行,并有时间显示
textsend.Text = \‘发送完毕后,文本框自动清空 End Sub
Private Sub Command2_Click()’退出后结束运行 End End Sub
Private Sub Form_Load()‘窗体加载时,发送文本框与接收文本框不可见 textsend.Visible = False‘发送信息文本框不可见 textget.Visible = False‘接收信息文本框可见 Winsockserver.LocalPort = 1001‘服务器端口号设置
Winsockserver.Listen‘服务器侦听 End Sub
Private Sub Winsockserver_Close() Winsockserver.Close‘关闭服务器 End Sub
Private Sub Winsockserver_ConnectionRequest(ByVal requestID As Long) ‘连接后,WinSock控件工作 textsend.Visible = True
textsend.Text = \‘清空文本框信息 textget.Visible = True textget.Text = \
If Winsockserver.State <> sckClosed Then Winsockserver.Close‘如果socket没有关闭,则关闭socket
Winsockserver.Accept requestID‘服务器接受请求,接受以后双方才能发送数据
MsgBox (\连接SERVER成功!\End Sub
Private Sub Winsockserver_DataArrival(ByVal bytesTotal As Long)‘信息接收 Dim tmpstr As String Dim a As String a = \客户端:\
Winsockserver.GetData tmpstr
textget.Text = textget.Text & a & tmpstr & vbCrLf End Sub
3.3.2客户端程序
Private Sub Command1_Click() winsockclient.Connect End Sub
Private Sub Command2_Click()’ 连接,且Shape控件显示连接状态 Dim aa As String
aa = \客户端:\
winsockclient.SendData \
textget.Text = textget.Text & aa & \ vbCrLf
textsend.Text = \End Sub
Private Sub Command3_Click() End End Sub
Private Sub Form_Load() ‘程序加载,文本框不可见
Text1.Text = \这里输入要连接的服务器的IP\‘提示输入ip地址 textsend.Visible = False textget.Visible = False
winsockclient.RemotePort = 1001’客户端端口号设置为1001 winsockclient.RemoteHost = \End Sub
Private Sub Text1_Change()
winsockclient.RemoteHost = Text1.Text‘客户端验证主机名 End Sub
Private Sub winsockclient_Close()‘关闭客户端 winsockclient.Close End Sub
Private Sub winsockclient_Connect()‘客户端连接 textsend.Visible = True textsend.Text = \ textget.Visible = True textget.Text = \
Command2.Visible = True MsgBox (\连接SERVER成功!\End Sub
Private Sub winsockclient_ConnectionRequest(ByVal requestID As Long) textsend.Visible = True textsend.Text = \ textget.Visible = True textget.Text = \
If Winsockserver.State <> sckClosed Then Winsockserver.Close‘如果socket没有关闭,则关闭socket
Winsockserver.Accept requestID End Sub
Private Sub winsockclient_DataArrival(ByVal bytesTotal As Long)‘信息接收 Dim tmpstr As String Dim a As String a = \服务器:\
winsockclient.GetData tmpstr
textget.Text = textget.Text & a & tmpstr & vbCrLf End Sub
3.4 运行程序 3.4.1 客户端运行结果
图3-3 客户端连接
运行后,填写要连接的主机的IP地址,点击连接,成功后,会提示连接服务器成功。点击确定,双方就可以进行通信。
图3-4 客户端信息接收
双方之间正常通信,接收端能显示信息内容和时间。