iPhone 5 iOS 8.3 である iOS デバイスでこの素晴らしいライブラリをチェックし続けると
、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;
}