У меня есть реализация, которую нужно выполнить в проекте колледжа, и я не знаю, как ее открыть !. моя проблема, как и название, разрешить андроид с помощью C++ через сокеты.conect android (сокет-клиент) с C++ (сокет-сервер) через TCP
C++ должен управлять как минимум двумя клиентами сокетов (устройствами Android) или более. так я стараюсь ...
#include <iostream>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<unistd.h>
using namespace std;
int main()
{
int client, server;
int portnum = 1500;
bool isExit = false;
int bufsize = 1024;
char buffer[bufsize];
struct sockaddr_in server_addr;
socklen_t size;
//init socekt
client = socket(AF_INET, SOCK_STREAM, 0);
if(client < 0){
cout << "Error Estableciendo la conexion" << endl;
}
cout <<"server Socket conexion creada" << endl;
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_port = htons(portnum);
//biding soket
if(bind(client,(struct sockaddr*)&server_addr,sizeof(server_addr)) < 0){
cout << "Error Biding Socket" << endl;
exit(1);
}
size= sizeof(server_addr);
cout << "buscando clientes" << endl;
//escuchando sokets
listen(client,1);
//accept client
server = accept(client, (struct sockaddr*)&server_addr, &size);
if(server < 0){
cout<< "Error al Aceptar" << endl;
exit(1);
}
while(server >0){
strcpy(buffer,"server conectado---\n");
send(server,buffer,bufsize,0);
cout <<"conectado con el cliente" << endl;
cout << "Ingresad # paara terminar la conexion" << endl;
cout <<"client: ";
do{
recv(server,buffer,bufsize,0);
cout << "buffer" << " ";
if(*buffer == '#'){
*buffer = '*';
isExit=true;
}
}while(*buffer != '*');
do{
cout << "\n server: ";
do{
cin >> buffer;
send(server,buffer,bufsize,0);
if(*buffer == '#'){
send(server,buffer,bufsize,0);
*buffer = '*';
isExit=true;
}
}while(*buffer != '*');
cout << "Client: ";
do{
recv(server,buffer,bufsize,0);
cout << buffer << " ";
if(*buffer == '#'){
*buffer = '*';
isExit = true;
}
}while(*buffer != '*');
}while(isExit);
cout << "Conection Terminated..." << endl;
cout << "Goodbye..." << endl;
isExit =false;
exit(1);
}
close(client);
return 0;
}
слушать каждую СВЯЗЬ (пожалуйста, если вы видите плохую логику в моем коде, дайте мне знать это и то, что мне нужно сделать, чтобы исправить это)
и в андроиде I сделать что-то вроде этого в классе, что его названия от деятельности только для тестирования ...
import java.net.Socket;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Socktest {
public void prueba() {
try {
Socket sock = new Socket("127.0.0.1",1234);
// Your Java Code Verbatim:
BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream()));
String test = br.readLine();
System.out.println(test);
sock.close();
} catch (Exception ex) {
System.out.println(ex.getCause().toString());
}
}
}
(пожалуйста, если вы видите плохо логика, дай мне knowit, потому что я хочу, чтобы узнать больше из моих неудач)
, и сервер идет хорошо, когда я скомпилирован, его стоял, чтобы получить новый коннект, но когда я наблюдаю активность андроида, и я запускаю «класс conection», он говорит, что доступ запрещен, я работаю над linux mint, если этот afect ..
Я буду благодарен вам за советы, предложения и советы.
Похоже, у вас есть portnum, установленный на сервере 1500, но клиент пытается подключиться к порту 1234. Кроме того, клиент пытается подключиться к localhost (127.0.0.1), поэтому, если Java-код не работает на одном и том же машина как сервер, она не будет работать –
'Socket sock = new Socket (" 127.0.0.1 ", 1234);' эта строка является вашей проблемой прямо здесь, '127 .0.0.1 - это локальная петля IP, ее фактический IP-адрес, который сопоставляется с устройством, которое выполняется на – Bhargav
. Ваш прослушивающий сокет называется 'client'. Это не клиент. Вы слушаете один порт и пытаетесь подключиться к другому. – EJP