Приложение Ioni c 4 android не подключается к локальному node js серверу при работе на реальном android устройстве - PullRequest
1 голос
/ 28 марта 2020

Я пытаюсь установить связь клиент-сервер для моего приложения Ioni c 4 android. У меня есть локальная node js реализация сервера на моем p c, и я использую socket.io для установления sh связи. Проблема в том, что когда я запускаю приложение в браузере или на эмуляторе, связь между приложением и локальным сервером нормальная, но когда я пытаюсь запустить приложение на реальном устройстве android (samsung galaxy s9 +), приложение не может подключиться на локальный сервер. Подробнее c сообщение «Пользователь подключен» не отображается на консоли сервера, чтобы указать, что приложение подключено к серверу и, следовательно, пользователь никогда не возвращает свой идентификатор пользователя.

Может кто-нибудь помочь мне выяснить, почему ?

Серверная часть

index. js

let app = require('express')();
let server = require('http').createServer(app);
let io = require('socket.io')(server);

// Allow CORS support and remote requests to the service
app.use(function(req, res, next)
{
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
  res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,Authorization');
  next();
});

// Set up route 
app.get('/', (req, res) =>
{
  res.json({ message: 'You connected to panic Shield server' });
});

var port = process.env.PORT || 8080;

server.listen(port, function(){
  console.log('listening in http://192.168.x.x:' + port);
});

const uuidv4 = require("uuid/v4");

// User connected to the server
io.on('connection', (socket) => {

  console.log('User Connected');

  socket.on('disconnect', function(){});

  socket.on('set-credentials', (credentials) => {
    let userId = uuidv4();
    ...
    // server informs user for his unique id
    socket.emit('your user id', userId);
    ...
  }
});

Клиентская сторона

приложение .module.ts

import { SocketIoModule, SocketIoConfig } from 'ngx-socket-io';
const config: SocketIoConfig = { url: 'http://192.168.x.x:8080', options: { secure: true } };

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    BrowserModule,
    IonicModule.forRoot(),
    AppRoutingModule,
    HttpClientModule,
    SocketIoModule.forRoot(config)
],
...

home.page.ts

import { Socket } from 'ngx-socket-io';

constructor(private socket: Socket) { }

async ngOnInit() {
  this.socket.connect();
  ...
}

async connectToServer(name, surname, gender, speech) {
  const str = name.concat(' // ').concat(surname).concat(' // ').concat(gender).concat(' // ').concat(speech);
  this.socket.emit('set-credentials', str);
  this.socket.on('your user id', (data) => {
    this.userId = data.toString();
    // save the userId
    set('userId', this.userId);
    // Refresh the page
    window.location.reload();
  });
}

1 Ответ

0 голосов
/ 03 апреля 2020

Я нашел проблему. В моем случае брандмауэр моего p c не позволяет подключаться к серверу другим устройствам в локальной сети. Когда я выключил брандмауэр, соединение между клиентом и сервером было установлено!

...