正常发送接收了, 但同一条数据发送 32次以后,发送端的ikcp_setoutput 回调就不执行了

ttp71kqs  于 2022-10-25  发布在  其他
关注(0)|答案(9)|浏览(476)

求大神指导 kcp = KCP.ikcp_create(0, (void*)0);
KcpUser cq = delegate (byte[] array, int v) {

};
        KCP.ikcp_setoutput(kcp, delegate (byte* data, int len, IntPtr kcp, void* v) {

            byte[] buff = new byte[len];
            Marshal.Copy(new IntPtr(data), buff, 0, len);
            socket.Send(buff);
        });

        KCP.ikcp_wndsize(kcp, 512, 512);
        KCP.ikcp_nodelay(kcp, 1, 10, 2, 1);
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8500));
        RunThread();

//发送部分代码
while (true)
{
KCP.ikcp_update(kcp, (uint)Environment.TickCount);
Thread.Sleep(1000);
index += 1;
string fuck = "我是大坏蛋呀!!"+index;
var bytes = System.Text.Encoding.UTF8.GetBytes(fuck);
int len = KCP.ikcp_send(kcp, bytes, bytes.Length);
KCP.ikcp_flush(kcp);;
}

qlfbtfca

qlfbtfca1#

还是 ikcp_recv 一直返回-1 悲伤

gywdnpxw

gywdnpxw2#

已解决,,,客户端没处理ack....

7qhs6swi

7qhs6swi3#

请问一下客户端ack是怎么处理的

ugmeyewa

ugmeyewa4#

我现在就是有一个问题就是假如我客户端一直发消息,客户端也进行了ack处理,服务端接收到某一个次数后就不接受了,比如说接收了1000次就停止了

swvgeqrz

swvgeqrz5#

这是服务端代码
`ikcpcb *kcp = ikcp_create(1, (void *) &addrClient);
kcp->output = udp_output;
ikcp_nodelay(kcp, 1, 1, 2, 1);
ikcp_wndsize(kcp, 128, 128);

int count=0;
while (1) {
    //Sleep(100);
    ikcp_update(kcp, clock());
    // 打印来自客户端发送来的数据
    while (1) {
        nRet = recvfrom(socketSrv, buf, BUF_SIZE, 0, (SOCKADDR *) &addrClient, &len);

/* if (nRet < 0){
int y = WSAGetLastError();
//printf(" WSAGetLastError(); %d\n", y);
break;
}*/
ikcp_input(kcp, buf, nRet);
ikcp_update(kcp, clock());
ikcp_flush(kcp);

hr = ikcp_recv(kcp, kcpbuf, BUF_SIZE);
        if (hr > 0) {
            count = count + 1;
        }
        printf("I recv :%s,count is  %d  \n", kcpbuf, count);
        // 没有收到包就退出
        //if (hr < 0) break;
        // 如果收到包就回射一个空包,里面应该是有KCP里处理好的包序号以及Ack信息
        ikcp_send(kcp, blankbuf, strlen(blankbuf) + 1);
        ikcp_update(kcp, clock());
        ikcp_flush(kcp);
    }

`

jm81lzqq

jm81lzqq6#

这是客户端代码

8yparm6h

8yparm6h7#

` ikcpcb *kcp = ikcp_create(1, (void *) &servAddr);
kcp->output = udp_output;
ikcp_nodelay(kcp, 1, 1, 2, 1);
ikcp_wndsize(kcp, 128, 128);

long start, current;

start = clock();
long slap = clock();
int index = 1;
while (1) {
    //Sleep(100);
    //printf("OK\n");
    current = clock();
    //
    ikcp_update(kcp, clock());

    int res;

    //if (current - start < 1000) {
        for (; current >= slap; slap += 10) {
            //char        temp[BUF_SIZE];
            //sprintf(temp,"%s_%d",buf,index);
            printf("ikcp send: %d  ", index);
            ikcp_send(kcp, buf, strlen(buf) + 1);
            ikcp_update(kcp, clock());
            ikcp_flush(kcp);
            index++;

            nRet = recvfrom(sockClient, recvbuf, BUF_SIZE, 0, (sockaddr *) &servAddr, &nServAddLen);
            //if(nRet < 0) break;
            ikcp_input(kcp, recvbuf, nRet);
            ikcp_update(kcp, clock());
            ikcp_flush(kcp);

            char kcpbuf[BUF_SIZE];
            ikcp_recv(kcp, kcpbuf, BUF_SIZE);
            //if(hr < 0) break;
            // 打印来自服务端发送来的数据
            printf("Recv From Server:%s\n", kcpbuf);
            ikcp_update(kcp, clock());
            ikcp_flush(kcp);
        //}
    }`
jfewjypa

jfewjypa8#

抱歉了,github这个贴代码的工具好像有bug

2w3kk1z5

2w3kk1z59#

麻烦问一下各位大佬这里面有哪些逻辑错误呢,十分期待您的回复!

相关问题