| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1486 人关注过本帖, 2 人收藏
标题:winsock应用重装后失灵了
只看楼主 加入收藏
thhjx
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-6-10
收藏
得分:0 
回复 17楼 easyppt
Lparameters _hSocket
Local stSockAddr, nSize, nIP, szIP, nPort
stSockAddr = Replicate(0h00, 16)
nSize      = Len(stSockAddr)
_hSocket = Accept(_hSocket, @stSockAddr, @nSize)
nIP   = CToBin(Substr(stSockAddr, 5, 4), '4RS')
szIP  = Sys(2600, inet_ntoa(nIP), 16)
szIP  = Left(szIP, At(0h00, szIP)-1)
nPort = ntohs(CToBin(Substr(stSockAddr, 3, 2), '2RS'))
WSAAsyncSelect(_hSocket, Thisform.HWnd, 0x464, 33)
Local szReadBuf, nDataLen
szReadBuf = Space(32768)
nDataLen = recv(_hSocket, @szReadBuf, Len(szReadBuf), 0)
lskey=''
nlx=0
If nDataLen>0
    szReadBuf = Left(szReadBuf, nDataLen)
    nCMD      = CToBin(Left(szReadBuf, 1), '1RS')
    ls_wz=At('Sec-WebSocket-Key:',szReadBuf)
    If ls_wz>0
        lskey=Substr(szReadBuf,ls_wz+19,25)
    Endif
Endif
lskey=Left(Alltrim(lskey),24)
If Len(Alltrim(lskey))<10
    Insert Into ClientInfo Values (_hSocket,szIP,nPort,0,0,'')   
    Return
Else
    Insert Into ClientInfo Values (_hSocket,szIP,nPort,0,0,'')
ENDIF
vRet=getxkey(lskey)
cHandshake = "HTTP/1.1 101 Switching Protocols" + Chr(13)+Chr(10) + ;
    "Connection:Upgrade" + Chr(13)+Chr(10) + ;
    "Upgrade: websocket" + Chr(13)+Chr(10) + ;
    "Sec-WebSocket-Accept:" +vRet+ Chr(13)+Chr(10) +  Chr(13)+Chr(10)
ls_fsjg = Thisform.Send(_hSocket,cHandshake,.t.)
昨晚 22:03
thhjx
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-6-10
收藏
得分:0 
接收JS发来的消息,要解析帧头,否则都是乱码。
cData=szreadbuf
zhjg=''
Local nOpcode, bMasked, nPayloadLen, cMaskKey, cPayload
* 解析帧头
nOpcode = Bitand(Asc(Substr(cData,1,1)), 0x0F)
If nOpcode==1
    bMasked = Bitand(Asc(Substr(cData,2,1)), 0x80) > 0
    nPayloadLen = Bitand(Asc(Substr(cData,2,1)), 0x7F)
    nOffset = 2   
    If nPayloadLen == 126
        nPayloadLen = Asc(Substr(cData,3,1)) * 256 + Asc(Substr(cData,4,1))
        nOffset = 4
    Endif
    If bMasked
        cMaskKey = Substr(cData, nOffset+1, 4)
        nOffset = nOffset + 4
    Endif
    cPayload = Substr(cData, nOffset+1, nPayloadLen)
    If bMasked
        cPayload = UnmaskData(cPayload, cMaskKey)
    Endif
    zhjg = Strconv(cPayload,11)
ELSE
    IF LEFT(cdata,6)='VFPKHD'
        zhjg=SUBSTR(cdata,7)
    ENDIF
ENDIF
昨晚 22:06
快速回复:winsock应用重装后失灵了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058372 second(s), 8 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved