Задать вопрос

Как подключить TCP клиент, написанный на Java Android Studio к TCP серверу, написанному на C#?

Написал TCP сервер и клиент на C#. Всё работает: клиент подключается к серверу и сервер принимает подключение от клиента. Потом решил сделать клиент на Java Android Studio. Сделал подключение через socket по моему локальному ip и общему порту(такому же как и на сервере). И строчка кода с подключением: Socket s = new Socket("192.168.43.183", 8080) не проходит: подключения тупо не действует.

Вот код сервера на C#

public class ServerObject
    {
        static TcpListener tcpListener; // сервер для прослушивания
        List<ClientObject> clients = new List<ClientObject>(); // все подключения
 
        protected internal void AddConnection(ClientObject clientObject)
        {
            clients.Add(clientObject);
        }
        protected internal void RemoveConnection(string id)
        {
            // получаем по id закрытое подключение
            ClientObject client = clients.FirstOrDefault(c => c.Id == id);
            // и удаляем его из списка подключений
            if (client != null)
                clients.Remove(client);
        }
        // прослушивание входящих подключений
        protected internal void Listen()
        {
            try
            {
                tcpListener = new TcpListener(IPAddress.Any, 8080);
                tcpListener.Start();
                Console.WriteLine("Сервер запущен. Ожидание подключений...");
 
                while (true)
                {
                    TcpClient tcpClient = tcpListener.AcceptTcpClient();
 
                    ClientObject clientObject = new ClientObject(tcpClient, this);
                    Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                    clientThread.Start();
                }
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
                Disconnect();
            }
        }
 
        // трансляция сообщения подключенным клиентам
        protected internal void BroadcastMessage(string message, string id)
        {
            byte[] data = Encoding.Unicode.GetBytes(message);
            for (int i = 0; i < clients.Count; i++)
            {
                clients[i].Stream.Write(data, 0, data.Length); //передача данных
                
            }
        }
        // отключение всех клиентов
        protected internal void Disconnect()
        {
            tcpListener.Stop(); //остановка сервера
 
            for (int i = 0; i < clients.Count; i++)
            {
                clients[i].Close(); //отключение клиента
            }
            Environment.Exit(0); //завершение процесса
        }
    }


Код клиента на Java Android Studio

public class MainActivity extends AppCompatActivity {
    private EditText ipeditText;
    private EditText nicknameText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void OnButtonClick1 (View view) {

        ipeditText = (EditText) findViewById(R.id.ipeditText);
        nicknameText = (EditText) findViewById(R.id.nameText);
        String ip = ipeditText.getText().toString();
        String nick = nicknameText.getText().toString();
        BackGroundTask b1 = new BackGroundTask();
        b1.execute(ip, nick);

        try {
            Socket s = new Socket("192.168.43.183", 8080);
            PrintWriter printWriter = new PrintWriter(s.getOutputStream());
            printWriter.write(nick);
            printWriter.flush();
            printWriter.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }

//        String ip = ipeditText.getText().toString();
//        try {
//            s = new Socket(ip, 8080);
//            printWriter = new PrintWriter(s.getOutputStream());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }

        Intent intent = new Intent(this, DisplayChatActivity.class);
        startActivity(intent);
    }


Пока что мне нужно хотя бы подключить клиент Java Android Studio к серверу на C#. Но подключение не проходит и исключение тупо пропускает его. Что именно не так в коде? И вообще возможно ли создания сервера/клиента на разных Я.П.
  • Вопрос задан
  • 829 просмотров
Подписаться 2 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@idd451289
На самом деле ответ простой. Из за каких то индусов(и особенностей джавы), сокет и активии не могут находится в одном потоке. Поэтому для сокеиа нужен отдельный поток)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы