网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月07日漏签0天
vb吧 关注:156,060贴子:1,166,227
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 12回复贴,共1页
<<返回vb吧
>0< 加载中...

请问一个winsock getdata的问题,急!望高手不吝赐教!

  • 只看楼主
  • 收藏

  • 回复
  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
正在做一个加密通信的程序
用DES加密数据,然后用winsock.senddata发送加密后的流
另一个程序用winsock.getdata接受,并且解密
但是总是无法解出正确的明文
加解密算法没有问题,都测试过了
就是传输式的问题,好像VB默认把药传输的串作了什么变换,或者填充
望高手指教,毕业设计的课题,急!


  • srqcn
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果数据包过大
winsock会分开发


2025-12-07 03:28:25
广告
不感兴趣
开通SVIP免广告
  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不是很大,就简单的一条信息
因为3DES以后数据是一个流,而VB好像默认是按照字符串接受


  • singones
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这个winsock之类的网站有不少资料..一般先搜索下资料..然后代码调试出问题再来提问吧..winsock 按字符串传过来..接那边确认下..收到几个字符..然后通过另一个winsock 与发送端确认字符数..
一般做得好的.通信有好多个winsock的..保证文件或者字符传输正确..
//只是个人的一点做过winsock 的经历罢了..
那次只想用一个winsock解决所有问题..结果问题百出..


  • singones
  • 求过二级
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
加密之类的.与winsock 传输一点关系都没有..


  • 123.118.49.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
猜测 用 接受端text1.text=getdat 观察 与传送端 是否一致 
text1事件不能用按钮 要用getdat状态改变更新
我的测试 从来不一


  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先谢谢各位了
我再贴一点代码
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
 Dim e_bit(),e_bitp() As Byte
 Winsock1.GetData e_bitp(), vbByte
 Text4.Text = e_bitp()

 Encrypt3Des_ArrToArr e_bitp(), e_bit(),1
'这个函数是3des加密用的,第一个参数是输入,第二个是输出,第三个是设置加密还是解密1是加密,2是解密
这个函数在本地调试通过了,在用
e_bitp()=text1.text
Encrypt3Des_ArrToArr e_bitp(), e_bit(),1后,再用
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Encrypt3Des_ArrToArr e_bit(), m_bit(),2
text2.text=m_bit()
解出了正确的明文
但是我现在在那行注释之后用winsock发,然后在接受端用
 Winsock2.SendData e_bit()
接受,但是解码就不行了

感谢大家!


  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
更正一下
是用winsock2.getdata e_bit接受


2025-12-07 03:22:25
广告
不感兴趣
开通SVIP免广告
  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果我用vbstring类型来收发数据就是一样的,但仅仅是显示出来一样,也就是一样的乱码,用那一串乱码在本地也不能正确解密,本地我是用一个m_bit() as byte来保存加密数据流的,我一直觉得这个流没有被正确传


  • 123.118.49.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
以前测试过 
发送 12345 接受是 1234512345123
也就是 说 一接受单位时间里边发送了若干次 全部接受到 并且合并导致
数据不一样 接受端 用text观察
先用不加密观察 传输是否正确


  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不加密时传输的是正确的
而且如果我把加密结果的乱码在本地显示出来
传输过后的再显示根本地的是一样的
但是这个乱码本身就解不回


  • 123.118.61.*
快试试吧,
可以对自己使用挽尊卡咯~
◆
◆
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
字串中文的问题

字串中文的问题,起於vb的字串是使用UniCode,而我们一般是使用Ascii Code。
这差别在何处呢?UniCode的每个字元长度是2个byte,而Ascii是一个byte,如果
说,我将们将VB的字串写入档案,有时会有意想不到的结果。例如:
 Text1.Text = "这是一个abc"
 len5 = Len(str5)
如果我们的Access资料库有一栏位的长度是10个Byte,所以我们在TextBox中设定
MaxLength = 10,但是上面的例子得到的len5是7,而不是我们认为的11,因为不管
是中文或英文,vb一律以UniCode来存,所以str5的长度是7个"字元",而text1最大
的长度限制是10,7没有超过10,故使用者仍可输入,但存档时,11个byte超过10个
byte,所以会有错。

可是或许有人发现,使用RS232来传资料时,另一端主机是Ascii编码的机器,在vb中
我们若使用String来传,一样可以通啊,其实那是vb在传送与接收data时,会做转换
,使我们的程式设计较方便,但如果传的资料是Binary时,就头大啦。例如说,以字
串的方式来传送资料,当想传Ascii 大於128时,常有些问题,因为ASC(Chr(129))=0
,使我们不能用Chr()的指令来放资料。(事实上,您可以使用ChrW(129)来存资料,
和使用AscW()来取得值,加个W代表是Word的运算),这时候,就只有使用Byte Array
来做了。

1.UniCode转成ByteAry
 Dim byteAry() As Byte
 Dim str5 As String
 Dim i As Long
 str5 = "这abc"
 byteAry = str5
 For i = LBound(byteAry) To UBound(byteAry)
 Debug.Print byteAry(i) '得 25 144 97 0 98 0 99 0
 Next i
 Debug.Print Len(str5), LenB(str5) '得4 8

 所以了,可看出UniCode 的特性,程式应改一下,使用Strconv()来转换

 Dim byteAry() As Byte
 Dim str5 As String
 Dim i As Long
 str5 = "这abc"
 byteAry = StrConv(str5, vbFromUnicode)
 For i = LBound(byteAry) To UBound(byteAry)
 Debug.Print byteAry(i) '得 25 144 97 98 99
 Next i
 Debug.Print LenB(StrConv(str5, vbFromUnicode)) '得5

2.ByteAry转回UniCode 使用Strconv()转换
 Dim byteAry(10) as Byte
 Dim Str5 as String
 byteAry(0) = 25
 byteAry(1) = 144
 byteAry(2) = 97
 byteAry(3) = 98
 byteAry(4) = 99
 Str5 = StrConv(byteAry, vbUniCode)


3.一些有用的函式SubStr() 中文化取子字串,相对Mid()
Strlen() 中文化字串长度,相对Len()
StrLeft() 中文化取左字串,相对Left()
StrRight() 中文化取右字串,相对Right()
isChinese() Check某个字是否中文字

Public Function SubStr(ByVal tstr As String, start As Integer, Optional leng As Variant) As String
Dim tmpstr As String
If IsMissing(leng) Then
 tmpstr = StrConv(MidB(StrConv(tstr, vbFromUnicode), start), vbUnicode)
Else
 tmpstr = StrConv(MidB(StrConv(tstr, vbFromUnicode), start, leng), vbUnicode)
End If
SubStr = tmpstr
End Function

Public Function Strlen(ByVal tstr As String) As Integer
 Strlen = LenB(StrConv(tstr, vbFromUnicode))
End Function

Public Function StrLeft(ByVal str5 As String, ByVal len5 As Long) As String
Dim tmpstr As String
tmpstr = StrConv(str5, vbFromUnicode)
tmpstr = LeftB(tmpstr, len5)
StrLeft = StrConv(tmpstr, vbUnicode)
End Function

Public Function StrRight(ByVal str5 As String, ByVal len5 As Long) As String
Dim tmpstr As String
tmpstr = StrConv(str5, vbFromUnicode)
tmpstr = RightB(tmpstr, len5)
StrLeft = StrConv(tmpstr, vbUnicode)
End Function

Public Function isChinese(ByVal asciiv As Integer) As Boolean
 If Len(Hex$(asciiv)) > 2 Then
 isChinese = True
 Else
 isChinese = False
 End If
End Function


  • kingofnet
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
问题已经解决,万分感谢!


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示