请问:在VB6.0中使用winsock控件,作为服务器要设置本地IP地址吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问:在VB6.0中使用winsock控件,作为服务器要设置本地IP地址吗?相关的知识,希望对你有一定的参考价值。

作为服务器的设置步骤?
作为客户端的设置步骤?

参考技术A 服务端可以这样:
With Listen
.Close
.LocalPort = Text1.Text ' (根据Text1中的数值来定监听端口 ( 假如为:4567 ) )
.Listen
End With
客户端可以这样:
Winsock1.Close
Winsock1.Connect Text1.Text, Text2.Text '(Text1为要连接的服务器IP地址(服务端在本地可以为 127.0.0.1), Text2为服务端监听的端口 ( 4567 ) )追问

服务端可以这样: '服务不用设置IP?
With Listen ‘这个是开始监听吗?
.Close ’为什么又要关闭?
.LocalPort = Text1.Text ' (根据Text1中的数值来定监听端口
.Listen ‘关闭后又要监听

Winsock1.Close ’是否设置前要关闭?
Winsock1.Connect Text1., Text2.'(Text1为要连接的服务器IP地址(服务端在本地可以为 127.0.0.1) ‘服务器在本地的意思,是否可以理解为在同一台电脑?
请高手解疑!感谢

追答

Listen 是一个监听的 Winsock
用with方法可以直接调用Listen的事件!
当然你也可以不这样写、方法随个人的!
With Listen
.Close
.LocalPort = Text1.Text ' (根据Text1中的数值来定监听端口 ( 假如为:4567 ) )
.Listen
End With

上面的一系列流程都是为了初始化Winsock控件的!

初始化的时候Winsock默认加载的是本地所有可用的IP!

至于客户端的

Winsock1.Close ’是否设置前要关闭?

‘================至于为什么要关闭我个人是这样认为的,因为他要去连接别人,如果自己已经在连接状态,那么必须要先关闭然后再连接了、如果不关闭而他又和别的机器已经连接了,那么你再使用此控件来连接别的机器的话就会出现错误了(因为他现在已经是已连接状态了)。

Winsock1.Connect Text1., Text2.'(Text1为要连接的服务器IP地址(服务端在本地可以为 127.0.0.1) ‘服务器在本地的意思,是否可以理解为在同一台电脑?

127.0.0.1 是回送地址,指的是本地机器,一般只是测试使用的。

基本上就是这样了、

追问

加我Q可以吗?45538322,还有些疑问请帮忙!

追答

395764211

本回答被提问者采纳
参考技术B 回答

需要,WinSock控件能够通过UDP协议(用户数据报协议)或TCP协议(数据传输协议)连接到远程的机器并进行数据交换。这两种协议都能用来创建客户端和服务端应用程序。就像定时器控件一样,WinSock控件运行时没有一个可视的界面

WinSock简介Socket(套接字)最初是由加利福尼亚大学Berkeley(伯克利)分校为UNIX操作系统开发的网络通信接口,随着UNIX的广泛使 用,Socket成为当前最流行的网络通信应用程序接口之一。20世纪90年代初,由Sun Microsystems,JSB,FTP software,Microdyne和Microsoft等几家公司共同定制了一套标准,即Windows Socket规范,简称WinSock。VB编写网络程序主要有两种方式:1.winsock控件 2.winsockAPI

可能的用途·创建客户端应用程序,它能在信息到达中央服务器之前把用户的信息收集起来。·创建服务端应用程序,它能作为来自多个用户的数据一个集中处理点。

提问

应该怎么设置ip地址呢

回答

获取计算机的名称的方法有三种,可以通过GetComputerName函数,gethostname函数,GetNetworkParams函数

第一种方法如下:调用GetComputerName函数可以获取本地 计算机的NetBios名称CString strName=_T(""); DWORD nSize=1024; ::GetComputerName(strName.GetBuffer(1024),&nSize); strName.ReleaseBuffer(); CString strText=_T(""); strText.Format(_T("本地计算机名称:%s"),strName); AfxMessageBox(strText);

第二种方法如下:通过gethostname函数获得方法如下WSADATA WSAData; if(WSAStartup(MAKEWORD(2,0),&WSAData)!=0) return; CString strName=_T(""); gethostname(strName.GetBuffer(1024),1024); strName.ReleaseBuffer(); CString strText=_T(""); strText.Format(_T("本地计算机的名称:%s"),strName); AfxMessageBox(strText); WSACleanup();

第三种方法如下:通过GetNetworkParams函数获的DWORD nResult=0; DWORD nLength=0; nResult=GetNetworkParams(NULL,&nLength); if(nResult!=ERROR_BUFFER_OVERFLOW) return; FIXED_INFO* pFixedInfo=(FIXED_INFO*)new BYTE(nLength); nResult=GetNetworkParams(pFixedInfo,&nLength); if(nResult!=ERROR_SUCCESS) delete[] pFixedInfo; return; CString strText=_T(""); strText.Format(_T("本地计算机名称:%s"),pFixedInfo->HostName); AfxMessageBox(strText); delete[] pFixedInfo;

第一步:获得本机的主机名称

第二步:通过主机名称获得主机的信息,这些信息包含在结构体 hostent中

希望我的回答对你有所帮助

提问

也就是说主机ip就是vb的ip地址吗

回答

对的

提问

具体对应我主机的哪一个网口的地址呢

回答

怎么看主机的ip地址方法一:1、右键屏幕左下角的开始,点击运行打开运行窗口。2、输入cmd进入命令提示窗口。3、输入ipconfig回车即可看到。方法二:1、右键屏幕左下角的开始选择网络连接。2、找到网络和共享中心点击本地连接。3、在常规界面选择详细信息即可。

把IP和子网掩码 进行 与运算 就可以得到子网。具体操作方法例如:1、首先将IP地址、掩码换算成二进制数字 220.193.128.9 11011100.11000001.10000000.00001001 255.255.255.240 11111111.11111111.11111111.111100002、将两组二进制对应的第一位乘第一位,第二位乘第二位......类推 得出: 11011100.11000001.10000000.000000003、再转为十进制即:220.193.128.0

提问

好的谢谢

回答

不用客气呢,能为你服务是我的荣幸[微笑]

提问

我连续的接收数据的话就收不到数据,如果单次接收就可以

是为什么呢?

回答

抱歉没看到你的问题,现在马上为你解决

解决方法:1、为保证数据正确传输,可以在S端中tcpServer_SendComplete事件中加入全局标志,如果发送完毕,置为true,否则为false。当连续发送频率过快时,此方法有可能会一直阻塞发送。(全局标志一直处理false状态,导致不能发送)

、 当发送频率过高时,一般情况下很多是重复数据发送过去。为保证数据包的完整性和正确性,可以这样做,如果面SendToClientMachine函数中发送的格式是tcpServer.sendData "SEND:" & strSendData我们改成tcpServer.sendData "SEND:" & strSendData & ":SENDEND"即两个Flag,一个头,一个尾。虽然客户机依然可能收到如"SEND:never-online, http://www.never-online.net:ENDSEND:never-online"这样的字符串,那么这条就不处理。直到数据包为SEND:never-online, http://www.never-online.net:END"

3、换成UDP协议方式发送,如果允许的话。

希望我的回答对你有所帮助

以上是关于请问:在VB6.0中使用winsock控件,作为服务器要设置本地IP地址吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何引用VB6.0编 用户自定义控件

vb6.0系统,如何在DataBrid控件中直接修改数据?

在VB中如何读取到桌面的路径?

VB6.0中MSChart调用数据库数据绘制折线图,代码一直有问题。没有接触过MSChart控件,希望大神多多指点!

vb6.0用sql语句更新数据后listview控件数据怎么

VB6.0使用汇总