С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Wonkyhole
6 / 6 / 1
Регистрация: 25.03.2014
Сообщений: 52
#1

Не приходит UDP сообщение - Программирование Android

25.03.2014, 00:38. Просмотров 842. Ответов 2
Метки нет (Все метки)

Здравствуйте. В моем приложении потребовалась широковещательная отправка сообщений. Сообщения вроде как отправляются, но приложение запущенное на компьютере не получает их. Так же смотрел сниффером, сообщений нет. Код отправки сообщений:
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
public class NoticeSender
{
    final static String tag = "NoticeSender";
 
    static void SendNotice(Context context, String mess)
    {
        DatagramSocket sock = null;
 
        try
        {
            sock = new DatagramSocket();
            sock.setBroadcast(true);
        }
        catch (SocketException e)
        {
            Log.e(tag, e.getMessage());
        }
 
        try
        {
            byte[] buff = mess.getBytes();
            DatagramPacket pack = new DatagramPacket(buff, buff.length, getBroadcastAddress(context), 35876);
            sock.send(pack);
        }
        catch (IOException e)
        {
            Log.e(tag, e.getMessage());
        }
 
        sock.close();
    }
     
    static InetAddress getBroadcastAddress(Context ctx) throws IOException
    {
        WifiManager wifi = (WifiManager) ctx.getSystemService(Context.WIFI_SERVICE);
        DhcpInfo dhcp = wifi.getDhcpInfo();
        byte[] quads = new byte[4];
 
        if (dhcp == null)
            return InetAddress.getByName("255.255.255.255");
 
        int broadcast = (dhcp.ipAddress & dhcp.netmask) | ~dhcp.netmask;
 
        for (int k = 0; k < 4; k++)
            quads[k] = (byte)((broadcast >> k * 8) & 0xFF);
 
        return InetAddress.getByAddress(quads);
    }
}
Код приемника:
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
    class ReceiveMessageArgs
    {
        protected string m_message;
        public string Message
        {
            get { return m_message; }
            set { m_message = value; }
        }
 
        public ReceiveMessageArgs(string message)
        {
            m_message = message;
        }
    }
 
    class UDPListener
    {
        private Socket socket;
        private byte[] DataBuffer;
 
        public delegate void ReceiveMessageEventHandler(object sender, ReceiveMessageArgs e);
        public event ReceiveMessageEventHandler OnReceiveMessage;
 
        public UDPListener(int port = 35876)
        {
            DataBuffer = new byte[8192];
 
            this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            this.socket.Bind(new IPEndPoint(IPAddress.Any, port));
        }
 
        public void Start()
        {
            this.socket.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, Receive, null);
        }
 
        public void Receive(IAsyncResult result)
        {
            try
            {
                var recievedBytes = this.socket.EndReceive(result);
 
                if (recievedBytes != 0)
                {
                    byte[] packetData = new byte[recievedBytes];
                    Buffer.BlockCopy(DataBuffer, 0, packetData, 0, recievedBytes);
                    string message = Encoding.UTF8.GetString(packetData);
                    ReceiveMessage(message);
                }
 
                this.socket.BeginReceive(DataBuffer, 0, DataBuffer.Length, SocketFlags.None, Receive, null);
            }
            catch (Exception e)
            {
            }
        }
 
        protected void ReceiveMessage(string message)
        {
            if (OnReceiveMessage != null)
                OnReceiveMessage(this, new ReceiveMessageArgs(message));
        }
    }
Подскажите, в чем может быть проблема? Телефон подключен через WiFi к роутеру, компьютер через витую пару подключен к этому же роутеру.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2014, 00:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не приходит UDP сообщение (Программирование Android):

Не приходит сообщение от сервера - Программирование Android
Здравствуйте! Ситуация такова: при отправке сообщения от клиента серверу все в порядке - сообщение приходит и отображается, однако, когда...

Не приходит ответ при HttpPost - Программирование Android
Уже неделю мучаюсь с одной проблемой. Необходимо отправить запрос на сервер и получить ответ. Запрос, как я понимаю, проходит, однако...

Server->Client Обновление БД длинной строкой. Приходит не все отосланное - Программирование Android
Отправляю из Сишной проги по сокету, длинную строку с командами создания и обновления БД Sqlite на андроиде. При приеме вычитывается...

JSOUP POST. В ответ вместо JSon приходит разметка страницы с полями для ввода данных - Программирование Android
Делаю пост запрос к апи сайта. Назад должен получить json, однако получаю разметку страницы с полями для ввода данных. Т.е. как будто...

UDP server. Отправка открытого массива - приходит не тот символ - Delphi
Имеем UDP server . Создадим для теста такую штуку var a: array of char; b: array of char; begin a :=...

Не приходит сообщение [TCP] - C#
Всем привет! Скажите скажите в чём я ошибся, почему у меня на Android (TCPClient) не приходят сообщения от компьютера (TCPServer)? Уже...

2
verylazy
Заблокирован
25.03.2014, 11:13 #2
firewall на компе отключен? если не отключен - порт открыт?
0
Wonkyhole
6 / 6 / 1
Регистрация: 25.03.2014
Сообщений: 52
25.03.2014, 17:55  [ТС] #3
firewall на компе отключен? если не отключен - порт открыт?
http://ybex.com/d/mxyjnv2bhy6njmdjxlfmn9bs4hxl4r2agraso1z5.html

Добавлено через 1 час 12 минут
Продебажил, выяснил, что не срабатывает Intent, через который я пытаюсь заставить отправить сообщение по сети.
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
package com.example.interceptingmessages;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.util.Log;
 
public class CallReceiver extends BroadcastReceiver
{
    private static final String tag = "CallReceiver";
 
    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.d(tag, "onReceive");
 
        String phoneNumber = "";
 
        if (intent != null && intent.getAction() != null && intent.getAction().equals("android.intent.action.PHONE_STATE"))
        {
            String phone_state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
 
            Log.d(tag, "Check phone_state. Phone_state = " + phone_state);
 
            if (phone_state.equals(TelephonyManager.EXTRA_STATE_RINGING))
            {
                phoneNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
                Log.d(tag, "Create new intent. Phone number: " + phoneNumber);
 
                Intent mIntent = new Intent(context, BroadcastReceiveServices.class);
                mIntent.putExtra("phoneNumber", phoneNumber);
                mIntent.putExtra("type", "call");
                context.startService(mIntent);   
            }
            else if (phone_state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK))
            {
            }
            else if (phone_state.equals(TelephonyManager.EXTRA_STATE_IDLE))
            {
            }
        }
    }
}
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
package com.example.interceptingmessages;
 
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
 
public class BroadcastReceiveServices extends IntentService
{
    final String tag = "BroadcastReceiveServices";
 
    public BroadcastReceiveServices()
    {
        super("BroadcastReceiveServices");
        Log.d(tag, "::BroadcastReceiveServices()");
    }
 
    public void onCreate()
    {
        super.onCreate();
        Log.d(tag, "::onCreate()");
    }
 
    @Override
    protected void onHandleIntent(Intent intent)
    {
        Log.d(tag, "::onHandleIntent()");
 
        String phoneNumber = intent.getStringExtra("phoneNumber");
        String type = intent.getStringExtra("type");
 
        String Name = "";
        Name = NoticeSender.NumberToName(getBaseContext(), phoneNumber);
 
        if (type.equals("call"))        
            NoticeSender.SendNotice(getBaseContext(), "Вам звонит: "+ Name + " (" + phoneNumber + ")" );
        if (type.equals("sms"))
        {
            String mess = intent.getStringExtra("message");
            NoticeSender.SendNotice(getBaseContext(), "Вам пришло сообщение от " + Name + " (" + phoneNumber + ")" + ": " + mess);
        }                           
    }
 
    public void onDestroy()
    {
        super.onDestroy();  
    }
}
http://ybex.com/d/1boxgacxx7yhrq44bz9rg812j55rixkjtj6e1i9u.html
Как видно по LogCat, onHandleIntent не вызывается. Из-за чего это может быть?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2014, 17:55
Привет! Вот еще темы с ответами:

Не приходит сообщение с почты - PHP
&lt;center&gt; &lt;form action=&quot;mail.php&quot; method=&quot;post&quot; name=&quot;f1&quot;&gt; &lt;p&gt;Введите имя:&lt;br&gt; &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;&lt;/p&gt; &lt;p&gt;Введите...

Сообщение с формы приходит пустым - PHP
Дело вот в чем. Есть форма и обработчик. &lt;?php if (isset($_POST)) {$familes = $_POST;} if (isset($_POST)) {$name = $_POST;} if...

Почему не приходит сообщение группе SignalR? - C# MVC
Методы из хаба. public void UserConnect(string message) { Clients.Group(&quot;managers&quot;).notifyManager(Context.ConnectionId, message);...

Форма обратной связи, на почту приходит пустое сообщение - PHP
Здравствуйте, помогите пожалуйста подкорректировать форму обратной связи на сайте http://renttrailers.ru/ Просто после отправки сообщения,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.