Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/55: Рейтинг темы: голосов - 55, средняя оценка - 4.62
Urian
8 / 8 / 4
Регистрация: 22.07.2011
Сообщений: 70
Завершенные тесты: 1
1

TCP клиент

24.03.2014, 04:21. Просмотров 10122. Ответов 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());
                }
            
        }
    };
}
Заранее спасибо
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2014, 04:21
Ответы с готовыми решениями:

TCP/IP клиент
Здравствуйте, Имеется хост, который слушает порт 50001, на андроиде написал такую функцию для...

TCP клиент в NDK
Как реализовать TCP клиент используя андроид ndk на С++?? Я слышал, что у андроид такое же ядро как...

TCP клиент под Android
Доброго времени суток. Имеется TCP сервер под Windows, написанный на Delphi XE5, также имеется...

Как сделать клиент TCP IP?
Доброго времени суток! Очень нужна помощь в Java, т.к. совсем не имел с ней дел. Есть сервер на...

4
zulkis
685 / 612 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
24.03.2014, 07:37 2
Urian, Падает то на какой строчке?
0
Urian
8 / 8 / 4
Регистрация: 22.07.2011
Сообщений: 70
Завершенные тесты: 1
24.03.2014, 16:28  [ТС] 3
При создании сокета:
Цитата Сообщение от Urian Посмотреть сообщение
Socket socket = new Socket(InetAddress.getByName("192.168.137.1"), 2002);
0
Антон Павлович
1 / 1 / 0
Регистрация: 25.08.2014
Сообщений: 2
25.08.2014, 00:54 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"/>


Ну и ясен пень серв должен работать в данный момент, у него должен быть статический ип и т.д.
1
cheloveki
0 / 0 / 2
Регистрация: 09.01.2014
Сообщений: 36
16.10.2014, 21:44 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);
            }
        }
0
16.10.2014, 21:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2014, 21:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Чтение данных с сервера (TCP клиент)
Добрый день подскажите как реализовать чтение данных с сервера непрерывным потоком и выводить все в...

TCP-сервер и TCP-клиент. Клиент не находит файл.
Всем привет! Решил изучать передачу данных по сети и начал с освоения примера, приведённого в...

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему....

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket...


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

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

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