Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.69
Urian
8 / 8 / 2
Регистрация: 22.07.2011
Сообщений: 70
Завершенные тесты: 1
#1

TCP клиент - Android

24.03.2014, 04:21. Просмотров 4401. Ответов 4
Метки нет (Все метки)

Доброго времени суток.
Мне стало нужно написать простое android-приложение, которое соединяется по беспроводной локальной сети с TCP-сервером на компьютере.
Сервер написан на .NET и работает (telnetится с другого компьютера).
Клиент под Андроид решил написать так же, как в Java, но он, к сожалению, не работает: всё время кидает Exception, я его перехватываю и пытаюсь сообщение от исключительной ситуации записать в TextView, но там оказывается пустая строка.

Попытки соединения делаю как из эмулятора, так и с телефона. В последнем случае телефон соединяется с компьютером через виртуальную точку доступа, используется программа VirtualRouter. IP адрес верный.


Код всего приложения:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.example.e1;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
 
 
 
 
public class MainActivity extends Activity {
    private TextView TW;
    private Button BB;
    private Socket sock;
    private EditText ET;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TW = (TextView) findViewById(R.id.tw1);
        BB = (Button) findViewById(R.id.button1);
        ET = (EditText) findViewById(R.id.editText1);
        BB.setOnClickListener(pr);
       
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
       
        return true;
    }
    
    
    private android.view.View.OnClickListener pr = new android.view.View.OnClickListener() {
        
        @Override
        public void onClick(View arg0) {
            
             try
                {
                 Socket socket = new Socket(InetAddress.getByName("192.168.137.1"), 2002);
                    InputStream is = socket.getInputStream();
                    byte buffer[] = new byte[1024];
                            int read = is.read(buffer);
TW.setText(Integer.toString(read));
                    is.close();
                }
                catch(Exception ex){
                     TW.setText(ex.getMessage());
                }
            
        }
    };
}
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 04:21     TCP клиент
Посмотрите здесь:

Android Нужно по протоколу tcp-ip отправлять на определенный порт данные
Android TCP клиент под андроид
TCP/IP клиент Android
Android TCP клиент в NDK
Передача по TCP Android
Отправить по TCP большое целое число Android
Android TCP Socket Client
Android Контрольная сумма TCP пакета
Android Не работает TCP-соединение
Android Пинг TCP сервера
Android Чтение данных с сервера (TCP клиент)
Обращение к modbus устройству через TCP протокол Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
24.03.2014, 07:37     TCP клиент #2
Urian, Падает то на какой строчке?
Urian
8 / 8 / 2
Регистрация: 22.07.2011
Сообщений: 70
Завершенные тесты: 1
24.03.2014, 16:28  [ТС]     TCP клиент #3
При создании сокета:
Цитата Сообщение от Urian Посмотреть сообщение
Socket socket = new Socket(InetAddress.getByName("192.168.137.1"), 2002);
Антон Павлович
0 / 0 / 0
Регистрация: 25.08.2014
Сообщений: 2
25.08.2014, 00:54     TCP клиент #4
Нужно с сокетом общаться в отдельном потоке, примерно так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
 
import java.net.Socket;
 
 
public class MyActivity extends Activity {
    public Button BB;
    public Socket socket;
    TT t;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        BB = (Button) findViewById(R.id.button1);
        BB.setOnClickListener(pr);
        t=new TT();
    }
 
    private android.view.View.OnClickListener pr = new android.view.View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            t.start();
        }
    };
 
    class TT extends Thread{
        @Override
        public void run() {
            super.run();
            try
            {
                socket = new Socket("сюда пихаем ип серва", сюда пишем порт);
                Log.e("лог", "соединение установлено");
            }
            catch(Exception ex){
                Log.e("лог", "ошибка");
            }
        }
    }
}
и в манифест надо не забыть разрешение на интернет добавить
<uses-permission android:name="android.permission.INTERNET"/>


Ну и ясен пень серв должен работать в данный момент, у него должен быть статический ип и т.д.
cheloveki
0 / 0 / 1
Регистрация: 09.01.2014
Сообщений: 36
16.10.2014, 21:44     TCP клиент #5
У меня проблема такая: то что отправляет андроид клиент на сервер я вижу, а вот ответ сервера не вижу.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// SocketServer.cs
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
 
namespace SocketServer
{
    class Program
    {
        static void Main(string[] args)
        {
            // Устанавливаем для сокета локальную конечную точку
            IPHostEntry ipHost = Dns.GetHostEntry("172.16.23.224");
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000);
 
            // Создаем сокет Tcp/Ip
            Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
            // Назначаем сокет локальной конечной точке и слушаем входящие сокеты
            try
            {
                sListener.Bind(ipEndPoint);
                sListener.Listen(10);
 
                // Начинаем слушать соединения
                while (true)
                {
                    Console.WriteLine("Ожидаем соединение через порт {0}", ipEndPoint);
 
                    // Программа приостанавливается, ожидая входящее соединение
                    Socket handler = sListener.Accept();
                    string data = null;
 
                    // Мы дождались клиента, пытающегося с нами соединиться
                    
                    byte[] bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);
                    
                    data += Encoding.UTF8.GetString(bytes, 0, bytesRec);
                    
                    // Показываем данные на консоли
                    Console.Write("Полученный текст: " + data + "\n\n");
                    
                    // Отправляем ответ клиенту\
                    string reply = "Спасибо за запрос в " + data.Length.ToString()
                            + " символов";
                    byte[] msg = Encoding.UTF8.GetBytes(reply);
                    handler.Send(msg);
 
                    if (data.IndexOf("<TheEnd>") > -1)
                    {
                        Console.WriteLine("Сервер завершил соединение с клиентом.");
                        break;
                    }
                    
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }
    }
}
Клиент не видит:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
final String host="172.16.0.100";
 
            Socket socket = null ;
            BufferedReader in = null;
            try {                   
                socket = new Socket(host,11000);
        } catch (UnknownHostException e) {
 
            e.printStackTrace();
        } catch (IOException e) {
          
            e.printStackTrace();
        }           
      try {
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    } catch (IOException e1) {          
        e1.printStackTrace();
    }
  while(true)
        { 
            String msg = null;
            try {
 
                msg = in.readLine();
                Log.d("","MSGGG:  "+ msg);
 
            } catch (IOException e) {                   
                e.printStackTrace();
            }
            if(msg == null)
            {                    
                break;
            }
            else
            {
                tv.setText(msg);
            }
        }
Yandex
Объявления
16.10.2014, 21:44     TCP клиент
Ответ Создать тему
Опции темы

Текущее время: 03:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru