| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 993 人关注过本帖, 1 人收藏
标题:吹佬 recv接收到的数据大了后后台 没了?
取消只看楼主 加入收藏
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
结帖率:2.78%
收藏(1)
 问题点数:0 回复次数:6 
吹佬 recv接收到的数据大了后后台 没了?
    * 接收到数据包
    PROCEDURE _RecvData
        LPARAMETERS _hSocket
        LOCAL szReadBuf, nDataLen
        szReadBuf = SPACE(32768)    && 32 * 1024
        nDataLen = recv(_hSocket, @szReadBuf, LEN(szReadBuf), 0)
        IF nDataLen > 0
            szReadBuf = LEFT(szReadBuf, nDataLen)
            this._OnRead(_hSocket, szReadBuf)
        ENDIF
        closesocket(_hSocket)
    ENDPROC

这里要加一个循环吗?

[此贴子已经被作者于2023-8-13 14:54编辑过]

搜索更多相关主题的帖子: 循环 后台 数据 LEFT 接收 
2023-08-13 14:22
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
回复 2楼 吹水佬
如果POST  超过23*1024 就接收不到

还有一个问题,服务器接收到数据,能不能知道对方的IP
2023-08-13 15:54
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-8-13 17:18:17的发言:


定义的数据缓冲是23*1024,不够可以加足够大。
IP在包头,这里socket用的协议不处理包头。
socket(AF_INET, SOCK_RAW, IPPROTO_IP),这个可以处理包头,现在不知还好不好使。




        stSockAddr = REPLICATE(0h00, 16)
        nSize      = LEN(stSockAddr)
        _hSocket = accept(_hSocket, @stSockAddr, @nSize)

stSockAddr这个有返回,怎么转化为字符中
2023-08-13 17:49
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
以下是引用吹水佬在2023-8-13 17:53:00的发言:

0h00改用chr(0)

stSockAddr =REPLICATE(CHR(0), 16) 还是乱码


这样的编码如何转化为IP
0200FAEFC0A80B0E0000000000000

每次执行会变,是不是内存变量?

[此贴子已经被作者于2023-8-13 21:07编辑过]

2023-08-13 18:06
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
回复 8楼 吹水佬
struct sockaddr {
        ushort  sa_family;
        char    sa_data[14];
};

struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};


DECLARE LONG inet_ntoa IN "Ws2_32" LONG
 SYS(2600,inet_ntoa (CTOBIN(SUBSTR(stSockAddr,5,4), "4RS") ) ,16)


LEFT(szIP, AT(0h00, szIP)-1)

---------------------------------------------------------------------
    * 取IP地址
    * SYS(2600, lpIP地址, 4)返回 in_addr 结构指针
    nIP = CTOBIN(SYS(2600, lpIP地址, 4), "4RS")
    * 转换成“.”分隔字串(xxx.xxx.xxx.xxx)
    * inet_ntoa()返回IP字符串指针
    szIP = SYS(2600, inet_ntoa(nIP), 16)
*!*        ?sz域名,szIP
   
    szIP = LEFT(szIP, AT(0h00, szIP)-1)

    nlen = ALEN(aIP) + 1
    DIMENSION aIP(nlen)
    aIP[nlen] = szIP


还是用如下取法
Substr(lpBuffer,lnOffs,4))

  Asc(Substr(lcBuffer,1,1))+;
        Asc(Substr(lcBuffer,2,1))*256+;
        Asc(Substr(lcBuffer,3,1))*65536+;
        Asc(Substr(lcBuffer,4,1))*16777216

[此贴子已经被作者于2023-8-14 09:05编辑过]

2023-08-14 07:53
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏(1)
得分:0 
以下是引用吹水佬在2023-8-14 09:27:29的发言:

这样看看应该可以理解

*    struct in_addr {
*        in_addr_t s_addr;    //32位无符号整数
*    }
DECLARE long strlen    IN msvcrt long
DECLARE long inet_addr IN ws2_32 string    && in_addr_t inet_addr(const char* cp)
DECLARE long inet_ntoa IN ws2_32 long      && char*     inet_ntoa(struct in_addr)
ip = "192.168.1.2"
sin_addr = inet_addr(ip)
p = inet_ntoa(sin_addr)
? SYS(2600,p,strlen(p))
? TRANSFORM(BITAND(sin_addr,0xFF))               +"."+;
  TRANSFORM(BITAND(BITRSHIFT(sin_addr,8), 0xFF)) +"."+;
  TRANSFORM(BITAND(BITRSHIFT(sin_addr,16),0xFF)) +"."+;
  TRANSFORM(BITAND(BITRSHIFT(sin_addr,24),0xFF))




*!*           返回stSockAddr字符串,再转化为bin和指针地址
       lcsin_addr=SUBSTR(stSockAddr,5,4)  &&sin_family[2] +sin_port[2] + in_addr sin_addr[4] + sin_zero[8]
       lpIP=IIF(1=1,CTOBIN(lcsin_addr, "4RS")   , ;
                    Asc(Substr(lcsin_addr,1,1))*2^0 + Asc(Substr(lcsin_addr,2,1))*2^8+ ;
                    Asc(Substr(lcsin_addr,3,1))*2^16+ Asc(Substr(lcsin_addr,4,1))*2^24  )
*!*           lpIP = inet_addr("192.168.1.2") 返lcsin_addr = BINTOC(inet_addr(@szIP), "4RS");  

       szIP=SYS(2600,inet_ntoa ( lpIP ) ,16)
       szIP4=TRANSFORM(BITAND(BITRSHIFT(lpIP,0),0xFF)) +"."+ TRANSFORM(BITAND(BITRSHIFT(lpIP,8),0xFF)) +;
              "."+ TRANSFORM(BITAND(BITRSHIFT(lpIP,16),0xFF)) +"."+ TRANSFORM(BITAND(BITRSHIFT(lpIP,24),0xFF))

       ? LEFT(szIP, AT(CHR(0), szIP)-1) ,    szIP4




[此贴子已经被作者于2023-8-14 10:43编辑过]

2023-08-14 10:38
ljb8864
Rank: 2
等 级:论坛游民
帖 子:171
专家分:14
注 册:2023-6-4
收藏
得分:0 
回复 12楼 iswith
32的结构是使用define class,你写一个用用
vfp2c32.zip (3.93 MB)


[此贴子已经被作者于2023-8-22 08:29编辑过]

2023-08-22 08:06
快速回复:吹佬 recv接收到的数据大了后后台 没了?
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031778 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved