我自昨晚以来一直在寻找答案,但似乎找不到任何有同样问题的人。相似但不是。我正在尝试通过stream_socket_client连接到Apples APNS。我在LAMP环境中工作,并打开端口2195。我的errorString说(权限被拒绝)。我的麻烦在于找到那些已经发布了很多关于这个错误的人。我从错误报告中得到的警告是警告:stream_socket_client():无法连接到ssl://gateway.sandbox.push.apple.com:2195(权限被拒绝)
至于好东西。我写了一个类来处理这个推送通知。这是设置连接的未解决方法。
public function setConnection() {
$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = '../model/apns-dev.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', "********");
stream_context_set_option($streamContext, 'ssl', 'verify_peer', true);
$apns = stream_socket_client('ssl://'.$apnsHost.':'. $apnsPort, $error, $errorString, 20, STREAM_CLIENT_CONNECT , $streamContext);
}
对我来说,这看起来很正确,但显然,这是不对的。
答案 0 :(得分:3)
它是SELinux Conf
问题原来是Fedora 12默认启用的@Path("/test")
public class Test {
private static ArrayList<LatLong> latLongList = new ArrayList<>();
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response storeData(Data data) {
String macD = data.getMac();
int routeD = data.getRoute();
float latD = data.getLatitude();
float longD = data.getLongitude();
// Add the lat and Long to the ArrayList.
latLongList.add(new LatLong(latD, longD));
int size = latLongList.size();
if (size > 1) {
for (int i = 0; i < latLongList.size(); i++) {
double distance = haversineDistance(latLongList.get(i),
latLongList.get(latLongList.size() - 1));
if (distance > 4) {
processData(macD, routeD, latD, longD);
} else {
return null;
}
}
} else {
processData(macD, routeD, latD, longD);
}
return Response.status(201).build();
}
private void processData(String macD, int routeD, float latD, float longD) {
Database db = new Database();
db.insertData(macD, routeD, latD, longD);
}
private double haversineDistance(ArrayList<LatLong> x, ArrayList<LatLong> y) {
return 0;
}
}
SELinux设置。
在shell控制台中,以root身份运行:
httpd_can_network_connect
参考:http://www.rkrishardy.com/2009/12/permission-denied-13-when-opening-socket-in-php-apache/
答案 1 :(得分:0)
以下教程中的simplepush.php代码对我来说效果很好。 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);