0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
1

Не создается Socket

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

Author24 — интернет-сервис помощи студентам
есть сервер на 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2016, 16:54
Ответы с готовыми решениями:

Socket.io Android Создаётся много подключений
Есть сервер node.js: var http = require('http'); var fs = require('fs'); var socketio =...

Невозможно создать Socket: Socket sock = new Socket(someHostString,somePortInt);
Народ! Помогите пожалуйста. Вся красота губится на exception что выскакивает в момент создания...

При нажатии на кнопку файл не создается на диске, а он создается только после сворачивания или закрытия окна...
Знакомлюсь с графическим интерфейсом Java Swing. Появилась такая проблема: при нажатии на кнопку...

Не создаётся exe файл. Создаётся папка netcoreapp2.0
На рабочем компе всё нормально, exe лежит в Debug. На домашнем может с настройками что намудрил,...

15
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.04.2016, 16:56 2
разрешение в манифесте прописано?
все это стартует в отдельном потоке? пруф?
0
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
28.04.2016, 18:35  [ТС] 3
как прописать разрешение в манифесте?
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
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
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
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
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
28.04.2016, 19:18 6
Цитата Сообщение от justjew Посмотреть сообщение
есть сервер на c#, но не получается законнектиться на него с приложения на Andriod
эээ стоп, сервер находится тоже на телефоне? если нет то адрес сервера никак не может быть 127.0.0.1 или localhost
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
28.04.2016, 19:22 7
Цитата Сообщение от Паблито Посмотреть сообщение
никак не может быть 127.0.0.1 или localhost
скорее всего пробует из эмулятора.
вопрос - в догонку: а из AS можно ведь "конектиться" к localhost?
0
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
28.04.2016, 22:55  [ТС] 8
эээ стоп, сервер находится тоже на телефоне? если нет то адрес сервера никак не может быть 127.0.0.1 или localhost
сервер на этом же компьютере
приложение с эмулятора запускаю
а как тогда коннектиться?

Добавлено через 25 минут
попробовал на локальный ip (192.168.100.3)
все равно не работает
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
28.04.2016, 23:26 9
походу подсети разные
0
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
29.04.2016, 00:02  [ТС] 10
Цитата Сообщение от SergioO Посмотреть сообщение
походу подсети разные
и что можно сделать?
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
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
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
29.04.2016, 18:40  [ТС] 12
Приеду домой с работы, попробую. Ещё за одно сделаю с asyncTask, а то я просто заимплеметил от runnable
0
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
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
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
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
260 / 208 / 99
Регистрация: 13.12.2015
Сообщений: 1,098
29.04.2016, 20:17 15
через телнет пробовали серверную часть тестить?
в командной строке набрать
telnet adres.domen port

Добавлено через 8 минут
желательно отключить фаер на всякий, для чистоты эксперимента
0
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 56
29.04.2016, 20:19  [ТС] 16
connected!
вот только новая проблема появилась
теперь сервер выбрасывает исключение
но это уже совсем другая история
буду сидеть разбираться
спасибо всем за помощь
0
29.04.2016, 20:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2016, 20:19
Помогаю со студенческими работами здесь

Если внутри функции создается объект с помощью gcnew, он создается один раз или при каждом вызове?
Обработчик по нажатию кнопки Visual C++ 2010 private: System::Void but1_Click(System::Object^...

Посоветуйте i5-7600 (Socket 1151) или i7-6800 (Socket 2011-3)
Посоветуйте, что взять i7-7700 (Socket 1151) или i7-6800 (Socket 2011-3) материнки на Z270 и на...

Assembler linux. Socket recv and socket send invalid arguments
Пишу шеллкод. Он ожидает подключения с 2222 порта, сам подключается на 1111 порт, выделяет память,...

Совместимость AMd athlon 2 x2 245 socket am3 к материнке ht2000 k8m890m-m socket am2
Подойдет ли проц AMd athlon 2 x2 245 socket am3 к материнке ht2000 k8m890m-m socket am2


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru