Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

关于libpomelo #147

Closed
NewYuil opened this Issue · 11 comments

4 participants

@NewYuil

我用android的ndk编译了libpomelo,现在想在android上用cocos2d-x和libpomelo试一试libpomole能否工作。
我在一个cocos2d-x的场景里加入了examples下的request.c的代码,编译通过了,但始终
// try to connect to server.
if(pc_client_connect(client, &address)) {
CCLog("fail to connect server.\n");
pc_client_destroy(client);
return;
}

fail to connect server.我的android的配置文件里加了联网的权限,android手机和作为游戏服务器(192.168.0.103)的电脑是通过wifi连接的。

android的ndk也不报错,所以我也不知道如何调试了。求助啊。

我在 https://github.com/NewYuil/libpomelo 里面添加了android.mk文件。大家有兴趣可以看看。

@NewYuil

对了 libpomelo是基于c的,是否有计划在以后用C++封装出一个pomelo_client的类,这样会方便使用一点。

@changchang

在标准错误输出上有没有更多的日志呢?
或者可以先改一下libpomelo里example里的例子的ip和端口,试试看是否能连上你的服务器。

@NewYuil

你好,错误报错在Connect failed error ECONNREFUSED。network.c文件的第402行被打印了

@fantasyni
Owner

说明你tcp链接没有建立,看看服务端怎么配置的

@NewYuil

服务器端的配置是直接用的libpomelo的说明里提到的tcp-pomelo,android端的代码如下:

#include
#include
#include "pomelo.h"

#define LOG_TAG "main"
#define LOGD(...) android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS)

extern "C"
{

const char *ip = "10.0.0.87";
int port = 3010;

// request callback
void on_request_cb(pc_request_t *req, int status, json_t *resp) {
if(status == -1) {
LOGD("Fail to send request to server.\n");
} else if(status == 0) {
char *json_str = json_dumps(resp, 0);
if(json_str != NULL) {
LOGD("server response: %s\n", json_str);
free(json_str);
}
}

// release relative resource with pc_request_t
json_t *msg = req->msg;
pc_client_t *client = req->client;
json_decref(msg);
pc_request_destroy(req);

pc_client_stop(client);
}

void do_request(pc_client_t *client) {
// compose request
const char *route = "connector.helloHandler.hi";
json_t *msg = json_object();
json_t *str = json_string("hi~");
json_object_set(msg, "msg", str);
// decref for json object
json_decref(str);

pc_request_t *request = pc_request_new();
pc_request(client, request, route, msg, on_request_cb);
}

// disconnect event callback.
void on_close(pc_client_t *client, const char *event, void *data) {
LOGD("client closed: %d.\n", client->state);
}

int doTest(){
// create a client instance.
pc_client_t *client = pc_client_new();

struct sockaddr_in address;

memset(&address, 0, sizeof(struct sockaddr_in));
address.sin_family = AF_INET;
address.sin_port = htons(port);
address.sin_addr.s_addr = inet_addr(ip);

// add some event callback.
pc_add_listener(client, PC_EVENT_DISCONNECT, on_close);

// try to connect to server.
if(pc_client_connect(client, &address)) {
LOGD("fail to connect server.\n");
pc_client_destroy(client);
return 1;
}

do_request(client);

// main thread has nothing to do and wait until child thread return.
pc_client_join(client);

// release the client
pc_client_destroy(client);

return 0;
}

void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thiz, jint w, jint h)
{
LOGD("can do2");
doTest();
}

}

是按照example里的request.c改的

@NewYuil

感觉我自己怎么都解决不了这个问题了。想问一下:libpomelo会提供android端的支持吗?如果会提供的话,用cocos2d-x写代码就蛮爽的。

@changchang

可以先确认一下服务器的端口是否已经在监听,用telnet或netstat这些工具检查一下。

再确认一下是否是因为android环境下导致的连接失败。可以用libpomelo提供的example连接你的服务器看是否能成功连上。

@NewYuil

问题解决了,呵呵 是IP地址的问题。我原来的host是127.0.0.1,改成192.168.0.102就可以了。
(以前将127.0.0.1改成192.168.0.102后,浏览器访问就失败了,就没在android上试。今天闲着没事又试了试,呵呵,高兴啊)。但还有一个问题,为什么改成192.168.0.102,我浏览器上的就没反应了呢?
{
"development":{
"connector": [
{"id": "connector-server-1", "host": "192.168.0.102", "port": 3150, "clientPort": 3010, "frontend": true}
]
},
"production":{
"connector": [
{"id": "connector-server-1", "host": "192.168.0.102", "port": 3150, "clientPort": 3010, "frontend": true}
]
}
}

为什么改成192.168.0.102,我浏览器上的就没反应了呢?
为什么改成192.168.0.102,我浏览器上的就没反应了呢?
为什么改成192.168.0.102,我浏览器上的就没反应了呢?

@NewYuil NewYuil closed this
@changchang

pomelo服务器只会监听servers.json文件中配置的host地址进行监听,不会监听同一个机器上的所有的ip地址。web上访问不了的问题可能是你配置了192.168.0.102,但浏览器里访问的地址是127.0.0.1,导致访问gate服务器失败。解决的办法可以在config.js里把gate服务器的ip配置一下。

@c38funuk

我也出现了同样的问题,困然一个星期都解决不了,请教以下楼主。
一,我看楼主上面说修改服务器文件的IP,请问是修改那个文件的IP啊,我的SERVER.JS.MASTER.JS的IP全部修改后,服务器无法启动。
二,请问修改的外网还是内网IP啊。

@changchang

@c38funuk 你使用的pomelo是什么版本的呢?使用0.3.9默认会在所有的ip上监听了,不用做配置修改。
服务器不能启动有报什么异常吗?ip配置应该不会导致服务器无法启动的,除非配置监听了非本机ip。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.