Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
#1

Не создается Socket - Программирование Android

28.04.2016, 16:54. Просмотров 772. Ответов 15
Метки нет (Все метки)

есть сервер на c#, но не получается законнектиться на него с приложения на Andriod
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
private static final String SERVER_IP = "127.0.0.1";
    private static final int SERVER_PORT = 31111;
 
    private Socket socket;
    private OutputStreamWriter osr;
    private BufferedWriter bw;
 
    public void run(){
        try {
            InetAddress serverAddress = InetAddress.getByName(SERVER_IP);
            System.out.println("serverAddress has been crated");
 
            socket = new Socket(serverAddress, SERVER_PORT);
            System.out.println("socket has been created");
 
            OutputStream socketOut = socket.getOutputStream();
            System.out.println("Output stream has been created");
 
            OutputStreamWriter osr = new OutputStreamWriter(socketOut);
            System.out.println("Output stream writer has been created");
 
            bw = new BufferedWriter( osr );
            System.out.println("BufferedWriter has been created");
        }
        catch (Exception ex){
            System.out.println(ex.getMessage());
        }
    }
к тому же exception в консоле пишет null
В чем может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2016, 16:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не создается Socket (Программирование Android):

Socket Android Client and Java Socket Server
Доброго времени суток.Пытаюсь сделать простое клиент-серверное приложение....

Не создается DB SQLite
Люди добрые, подскажите что не так в коде package...

Не создается фрагмент
При запуске приложения отображается фрагмент (fragment1) этот фрагмент имеет...

Не создается активность
Создал первое приложение, запустил, экспортировал, все работает. Когда создаю...

Не создается БД SQLite
Здравствуйте! Пишу своё первое приложение в Android studio. Есть 5 классов....

Не создается база данных
Здравствуйте, начал только изучать базу данных, и вот проблема в Android Studio...

15
Pablito
2655 / 2137 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
28.04.2016, 16:56 #2
разрешение в манифесте прописано?
все это стартует в отдельном потоке? пруф?
0
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
28.04.2016, 18:35  [ТС] #3
как прописать разрешение в манифесте?
0
Pablito
2655 / 2137 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
28.04.2016, 18:45 #4
что бы долго не объяснять где в файле это писать - вот пример манифеста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mytestapplication">
 
   <uses-permission android:name="android.permission.INTERNET"/>
    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>
нужная строка
XML
1
   <uses-permission android:name="android.permission.INTERNET"/>
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
28.04.2016, 19:10 #5
Цитата Сообщение от justjew Посмотреть сообщение
к тому же exception в консоле пишет null
если не ошибаюсь, то это означает что исключений не возникло причем, согласно документации (сам без году неделю занимаюсь Андройд), то лучше использовать:
SocketException - ошибка создания
IllegalArgumentException
IOException
и поробуйте все-таки строку, тк она скорее всего резольвится, те
private static final String SERVER_IP = "localhost";

Java
1
2
3
4
5
6
7
8
9
10
try {
создаем пустой сокет
} SocketException;
try {
socket.conntect(hostname, port);
} IllegalArgumentException;
try {
//пишем в сокет;
} IOException;
если я не путаю потоки
0
Pablito
2655 / 2137 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
28.04.2016, 19:18 #6
Цитата Сообщение от justjew Посмотреть сообщение
есть сервер на c#, но не получается законнектиться на него с приложения на Andriod
эээ стоп, сервер находится тоже на телефоне? если нет то адрес сервера никак не может быть 127.0.0.1 или localhost
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
28.04.2016, 19:22 #7
Цитата Сообщение от Паблито Посмотреть сообщение
никак не может быть 127.0.0.1 или localhost
скорее всего пробует из эмулятора.
вопрос - в догонку: а из AS можно ведь "конектиться" к localhost?
0
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
28.04.2016, 22:55  [ТС] #8
эээ стоп, сервер находится тоже на телефоне? если нет то адрес сервера никак не может быть 127.0.0.1 или localhost
сервер на этом же компьютере
приложение с эмулятора запускаю
а как тогда коннектиться?

Добавлено через 25 минут
попробовал на локальный ip (192.168.100.3)
все равно не работает
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
28.04.2016, 23:26 #9
походу подсети разные
0
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
29.04.2016, 00:02  [ТС] #10
Цитата Сообщение от SergioO Посмотреть сообщение
походу подсети разные
и что можно сделать?
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
29.04.2016, 18:08 #11
надо чтобы адреса и подсети согласовывались.
какие сейчас адреса и подсети?
просто для linux (android) 127.0.0.1 - это он сам и есть )) он же типа не знает что его эмулируют.
надо чтобы сервер-сокет висел на 192.168.1.1 c маской 255.255.255.0 (допустим),
а андройд 192.168.1.2 255.255.255.0
чтобы они в одной подсети (192.168.1.* или другой) были

Добавлено через 17 часов 47 минут
justjew, как успехи? заработало?
0
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
29.04.2016, 18:40  [ТС] #12
Приеду домой с работы, попробую. Ещё за одно сделаю с asyncTask, а то я просто заимплеметил от runnable
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
29.04.2016, 19:10 #13
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 java.net.InetSocketAddress;
import java.net.Socket;
import java.util.Scanner;
import java.io.*;
 
public class SocketClass {
    public static void main(String[] args) {
        try {
            Socket ClientSocket = new Socket();
            ClientSocket.connect(new InetSocketAddress("www.google.com", 80), 5000);
 
            if (ClientSocket.isConnected()){
                System.out.println("Connected...\n");
            }
 
            String query = "GET HTTP/1.1\n" +
                            "Accept-Charset: utf-8\n"+
                            "Accept: text/plain"+
                    "Host:[url]www.google.com[/url] 80\n" +
                    "\n";
 
 
            OutputStream outStream = ClientSocket.getOutputStream();
            outStream.write(query.getBytes());
 
 
            InputStream inStream = ClientSocket.getInputStream();
            Scanner in = new Scanner(inStream);
 
            while (in.hasNextLine()) {
                String line = in.nextLine();
                System.out.println(line);
            }
            ClientSocket.close();
            if (ClientSocket.isClosed()) {
                System.out.println("\nConnection closed");
            }
        }
        catch (Exception Excep) {
            System.out.println(Excep);
        }
 
    }
}
попробовал сокеты.
программка чуток кривенькая, но проверить клиента можно.
а у Вас С# что там на серверном сокете? IIS на 80 порту?
http или https?
0
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
29.04.2016, 20:06  [ТС] #14
Цитата Сообщение от SergioO Посмотреть сообщение
а у Вас С# что там на серверном сокете? IIS на 80 порту?
http или https?
Сервер нагло сп....ил, выглядит он вот так
Кликните здесь для просмотра всего текста

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class Server
    {
        private byte[] buffer = new byte[1024];
        public List<SocketL> ClientSockets { get; set; }
        List<string> names = new List<string>();
        private Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
 
        public Server()
        {
            ClientSockets = new List<SocketL>();
            SetupServer();
        }
 
        private void SetupServer()
        {
            Console.WriteLine("Setting up server...");
            serverSocket.Bind(new IPEndPoint(IPAddress.Any, 31111));
            Console.WriteLine("Server socket has been bound");
            serverSocket.Listen(1);
            Console.WriteLine("Server started listening");
            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
            Console.WriteLine("Server started accepting");
        }
 
        private void AcceptCallback(IAsyncResult ar)
        {
            Socket socket = serverSocket.EndAccept(ar);
            ClientSockets.Add(new SocketL(socket));
            names.Add(socket.RemoteEndPoint.ToString());
 
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), null);
            serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), null);
        }
 
        private void RecieveCallback(IAsyncResult ar)
        {
            Socket socket = (Socket)ar.AsyncState;
            if (socket.Connected)
            {
                int received;
                try
                {
                    received = socket.EndReceive(ar);
                }
                catch (Exception)
                {
                    for (int i = 0; i < ClientSockets.Count; i++)
                    {
                        if (ClientSockets[i].Socket.RemoteEndPoint.ToString().Equals(socket.RemoteEndPoint.ToString()))
                        {
                            ClientSockets.RemoveAt(i);
                            Console.WriteLine("Clients connected: {0}", ClientSockets.Count.ToString());
                        }
                    }
                    return;
                }
                if (received != 0)
                {
                    byte[] dataBuf = new byte[received];
                    Array.Copy(buffer, dataBuf, received);
                    string text = Encoding.ASCII.GetString(dataBuf);
                    Console.WriteLine("Text received: {0}", text);
                    
                    for (int i = 0; i < ClientSockets.Count; i++)
                    {
                        if (socket.RemoteEndPoint.ToString().Equals(ClientSockets[i].Socket.RemoteEndPoint.ToString()))
                        {
                            Console.WriteLine("\n" + ClientSockets[i].Name + ": " + text);
                        }
                    }
                }
                else
                {
                    for (int i = 0; i < ClientSockets.Count; i++)
                    {
                        if (ClientSockets[i].Socket.RemoteEndPoint.ToString().Equals(socket.RemoteEndPoint.ToString()))
                        {
                            ClientSockets.RemoveAt(i);
                            Console.WriteLine("Clients connected: {0}", ClientSockets.Count.ToString());
                        }
                    }
                }
            }
            socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(RecieveCallback), socket);
        }
    }
C#
1
2
3
4
5
6
7
8
9
10
class SocketL
    {
        public Socket Socket { get; set; }
        public string Name { get; set; }
 
        public SocketL(Socket socket)
        {
            this.Socket = socket;
        }
    }
0
SergioO
168 / 184 / 90
Регистрация: 13.12.2015
Сообщений: 995
29.04.2016, 20:17 #15
через телнет пробовали серверную часть тестить?
в командной строке набрать
telnet adres.domen port

Добавлено через 8 минут
желательно отключить фаер на всякий, для чистоты эксперимента
0
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
29.04.2016, 20:19  [ТС] #16
connected!
вот только новая проблема появилась
теперь сервер выбрасывает исключение
но это уже совсем другая история
буду сидеть разбираться
спасибо всем за помощь
0
29.04.2016, 20:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2016, 20:19
Привет! Вот еще темы с решениями:

Не создается БД на некоторых устройствах
Работает на реальном лоллипопе и на genymotion 4.1.1, не работает на...

Не создается база данных
Здравствуйте. не получается создать базу данных((((( есть класс: package...

Не создается MainActivity.java
Подскажите почему не создается форма по умолчанию?

Не создается файл на sd карте
Пытаюсь создать файл таким образом new...


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

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

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