0

当我继续使用 iOS 设备(即 iphone 5 iOS 8.3)检查这个很棒的库时, 当我尝试连接从我的 xCode 运行的服务器时,我遇到了
奇怪的(或不是)连接错误。
并且 Iphone 应用程序也从 xcode 运行。
该行:
if (enet_host_service(client, &event, 1000) > 0 && event.type == ENET_EVENT_TYPE_CONNECT)

不要通过并跳转到:
enet_peer_reset(peer);

但是当我从我的桌面作为简单的客户端/服务器应用程序运行这段代码时,一切都运行良好。
这是我从一些互联网站点获取的代码。
请注意,我将 HOST 设置为我的 Mac : echo $HOSTNAME。也许这是问题所在,iPhone 无法连接我的 Mac .. 我不知道
如何检查这个?
谢谢
这是代码:

客户端桌面:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include "enet/enet.h"

#define BUFFERSIZE 1024

#define PORT 9991



ENetAddress  address;

ENetHost   *server;

ENetEvent  event;

ENetPacket      *packet;



char    buffer[BUFFERSIZE];



int  main(int argc, char ** argv) {

    int  i;



    if (enet_initialize() != 0) {

        printf("Could not initialize enet.");

        return 0;

    }



    address.host = ENET_HOST_ANY;

    address.port = PORT;



    server = enet_host_create(&address, 100, 2, 0, 0);



    if (server == NULL) {

        printf("Could not start server.\n");

        return 0;

    }

    else

    {

        printf("Server Started host: %d on port:%d.\n",address.host, address.port);



    }



    while (1) {

        while (enet_host_service(server, &event, 1000) > 0) {

            switch (event.type) {



                case ENET_EVENT_TYPE_CONNECT:

                    break;



                case ENET_EVENT_TYPE_RECEIVE:

                    if (event.peer->data == NULL) {

                        event.peer->data =

                        malloc(strlen((char*) event.packet->data)+1);

                        strcpy((char*) event.peer->data, (char*)

                               event.packet->data);



                        sprintf(buffer, "%s has connected\n",

                                (char*) event.packet->data);

                        packet = enet_packet_create(buffer,

                                                    strlen(buffer)+1, 0);

                        enet_host_broadcast(server, 1, packet);

                        enet_host_flush(server);

                    } else {

                        for (i=0; i<server->peerCount; i++) {

                            if (&server->peers[i] != event.peer) {

                                sprintf(buffer, "%s: %s",

                                        (char*) event.peer->data, (char*)

                                        event.packet->data);

                                packet = enet_packet_create(buffer,

                                                            strlen(buffer)+1, 0);

                                enet_peer_send(&server->peers[i], 0,

                                               packet);

                                enet_host_flush(server);

                            } else {



                            }

                        }

                    }

                    break;



                case ENET_EVENT_TYPE_DISCONNECT:

                    sprintf(buffer, "%s has disconnected.", (char*)

                            event.peer->data);

                    packet = enet_packet_create(buffer, strlen(buffer)+1, 0);

                    enet_host_broadcast(server, 1, packet);

                    free(event.peer->data);

                    event.peer->data = NULL;

                    break;



                default:

                    printf("Tick tock.\n");

                    break;

            }



        }

    }



    enet_host_destroy(server);

    enet_deinitialize();

    return 0;

}

客户端 Iphone 设备(cpp 游戏引擎的一部分)编译良好。


char  buffer[BUFFERSIZE];



    ENetHost  *client;

    ENetAddress  address;

    ENetEvent  event;

    ENetPeer  *peer;

    ENetPacket  *packet;

    int connected=0;

    if (enet_initialize() != 0) {

        log("Could not initialize enet.\n");

        return false;

    }

    client = enet_host_create(NULL, 1, 2, 5760/8, 1440/8);



    if (client == NULL) {

        log("Could not create client.\n");

        return false;

    }



    enet_address_set_host(&address, HOST);

    address.port = PORT;



    peer = enet_host_connect(client, &address, 2, 0);



    if (peer == NULL) {

        log("Could not connect to server\n");

        return false;

    }



    if (enet_host_service(client, &event, 1000) > 0 &&

        event.type == ENET_EVENT_TYPE_CONNECT) {



        log("Connection to %s succeeded.\n", HOST);

        connected++;



        strncpy(buffer, "Meiry Test", BUFFERSIZE);

        packet = enet_packet_create(buffer, strlen(buffer)+1,

                                    ENET_PACKET_FLAG_RELIABLE);

        enet_peer_send(peer, 0, packet);



    } else {

        enet_peer_reset(peer);

        log("Could not connect to %s.\n", HOST);

        return false;

    }

服务器


#include <stdio.h>



#include <string.h>

#include <stdlib.h>

#include "enet/enet.h"

#define BUFFERSIZE 1024

#define PORT 9991



ENetAddress  address;

ENetHost   *server;

ENetEvent  event;

ENetPacket      *packet;



char    buffer[BUFFERSIZE];



int  main(int argc, char ** argv) {

    int  i;



    if (enet_initialize() != 0) {

        printf("Could not initialize enet.");

        return 0;

    }



    address.host = ENET_HOST_ANY;

    address.port = PORT;



    server = enet_host_create(&address, 100, 2, 0, 0);



    if (server == NULL) {

        printf("Could not start server.\n");

        return 0;

    }

    else

    {

        printf("Server Started host: %d on port:%d.\n",address.host, address.port);



    }



    while (1) {

        while (enet_host_service(server, &event, 1000) > 0) {

            switch (event.type) {



                case ENET_EVENT_TYPE_CONNECT:

                    break;



                case ENET_EVENT_TYPE_RECEIVE:

                    if (event.peer->data == NULL) {

                        event.peer->data =

                        malloc(strlen((char*) event.packet->data)+1);

                        strcpy((char*) event.peer->data, (char*)

                               event.packet->data);



                        sprintf(buffer, "%s has connected\n",

                                (char*) event.packet->data);

                        packet = enet_packet_create(buffer,

                                                    strlen(buffer)+1, 0);

                        enet_host_broadcast(server, 1, packet);

                        enet_host_flush(server);

                    } else {

                        for (i=0; i<server->peerCount; i++) {

                            if (&server->peers[i] != event.peer) {

                                sprintf(buffer, "%s: %s",

                                        (char*) event.peer->data, (char*)

                                        event.packet->data);

                                packet = enet_packet_create(buffer,

                                                            strlen(buffer)+1, 0);

                                enet_peer_send(&server->peers[i], 0,

                                               packet);

                                enet_host_flush(server);

                            } else {



                            }

                        }

                    }

                    break;



                case ENET_EVENT_TYPE_DISCONNECT:

                    sprintf(buffer, "%s has disconnected.", (char*)

                            event.peer->data);

                    packet = enet_packet_create(buffer, strlen(buffer)+1, 0);

                    enet_host_broadcast(server, 1, packet);

                    free(event.peer->data);

                    event.peer->data = NULL;

                    break;



                default:

                    printf("Tick tock.\n");

                    break;

            }



        }

    }



    enet_host_destroy(server);

    enet_deinitialize();

    return 0;

}
4

0 回答 0