| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 886 人关注过本帖, 1 人收藏
标题:吹佬 recv接收到的数据大了后后台 没了?
只看楼主 加入收藏
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
结帖率:2.78%
收藏(1)
 问题点数:0 回复次数:13 
吹佬 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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
“大了后后台 没了”什么意思
2023-08-13 15:48
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册:2023-6-4
收藏
得分:0 
回复 2楼 吹水佬
如果POST  超过23*1024 就接收不到

还有一个问题,服务器接收到数据,能不能知道对方的IP
2023-08-13 15:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
以下是引用ljb8864在2023-8-13 15:54:59的发言:

如果POST  超过23*1024 就接收不到

还有一个问题,服务器接收到数据,能不能知道对方的IP

定义的数据缓冲是23*1024,不够可以加足够大。
IP在包头,这里socket用的协议不处理包头。
socket(AF_INET, SOCK_RAW, IPPROTO_IP),这个可以处理包头,现在不知还好不好使。
2023-08-13 17:18
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
回复 5楼 ljb8864
0h00改用chr(0)
2023-08-13 17:53
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
sockaddr是结构体,使用不同的协议其含义不同。
参考:https://learn.
2023-08-13 21:09
ljb8864
Rank: 1
等 级:新手上路
帖 子:169
专家分:7
注 册: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
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10587
专家分:43118
注 册:2014-5-20
收藏
得分:0 
这样看看应该可以理解
程序代码:
*    struct in_addr {
*        in_addr_t s_addr;    [color=#808080]//32位无符号整数[/color]
*    }
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))
2023-08-14 09:27
快速回复:吹佬 recv接收到的数据大了后后台 没了?
数据加载中...
 
   



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

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