Заблокирован |
||||||||
1 |
||||||||
02.03.2016, 09:35. Показов 20284. Ответов 24 Метки нет (Все метки)
на бинде вылетает ошибка такая вот странная
где
Добавлено через 18 минут Добавлено через 11 часов 56 минут
__________________
0 |
11066 / 7623 / 1178 Регистрация: 21.01.2016 Сообщений: 28,660 |
|
02.03.2016, 12:38 |
2 |
Ну это же очевидно. Поставьте Brakepoint на строке
1 |
1087 / 830 / 490 Регистрация: 09.04.2014 Сообщений: 1,966 |
|
02.03.2016, 12:50 |
3 |
а почему бы не использовать метод System.Net.Dns.GetHostAddresses(string hostName)?
0 |
Заблокирован |
|
02.03.2016, 15:03 [ТС] |
4 |
Usaga,
тут все верно, проверено отладчиком nedel, внешний ip адрес невозможно получить со своего компьютера, только с другого сервера в интернете
0 |
nedel 1087 / 830 / 490 Регистрация: 09.04.2014 Сообщений: 1,966 |
||||
02.03.2016, 15:35 |
5 |
|||
не сразу понял, что вы ищете свой ip адрес
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 15:54 |
6 |
Penelent, а как ты собираешься слушать сокет с IP, к которому ты доступа не имеешь?
1 |
Заблокирован |
|
02.03.2016, 16:11 [ТС] |
7 |
IPAddress.Any что это за бредятина? там нули какие то, это не IP это хз че…
Penelent, а как ты собираешься слушать сокет с IP, к которому ты доступа не имеешь? в каком смысле не имею? это мой ip, как я могу не иметь к нему доступа
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 16:14 |
8 |
в каком смысле не имею? это мой ip, как я могу не иметь к нему доступа если это IP именно твоей машины, то зачем лезть куда-то в интернет, чтоб его узнать? Если это IP твоего шлюза, через который ты в интернете сидишь, то как ты на него залезешь? Добавлено через 50 секунд Не по теме:
там нули какие то, это не IP это хз че… Ыыыы
0 |
Заблокирован |
|
02.03.2016, 16:17 [ТС] |
9 |
если это IP именно твоей машины, то зачем лезть куда-то в интернет, чтоб его узнать? Если это IP твоего шлюза, через который ты в интернете сидишь, то как ты на него залезешь? через другой сайт типа 2ip.ru неужели не понятно?
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 16:18 |
10 |
через другой сайт типа 2ip.ru неужели не понятно? а это ответ на какой вопрос?
0 |
Заблокирован |
|
02.03.2016, 16:23 [ТС] |
11 |
3 символа
а это ответ на какой вопрос?
Если это IP твоего шлюза, через который ты в интернете сидишь, то как ты на него залезешь?
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 16:24 |
12 |
Кстати тебе текст ошибки SocketException — «Требуемый адрес для своего контекста неверен» ни о чем не говорит? Добавлено через 51 секунду
0 |
Заблокирован |
|
02.03.2016, 16:35 [ТС] |
13 |
ни о чем не говорит? то то и оно что не говорит
Penelent, то есть по-твоему ты через левый сайт сможешь залезть на сервер своего провайдера и открыть там сокет на прослушивание? да при чем тут на сервер провайдера? я просто узнаю так свой внешний ip, больше мне от этого левого сайта ничего не надо, сервер будет ни где то черте где, а на моем же компе, просто чтобы к нему можно было подключиться из интернета, а не только по локальной сети — надо узнать его внешний ip, забиндиться на него и к нему же коннектить клиентов
0 |
1087 / 830 / 490 Регистрация: 09.04.2014 Сообщений: 1,966 |
|
02.03.2016, 16:44 |
14 |
что это за бредятина? там нули какие то, это не IP это хз че… msdn: Метод Socket.Bind использует поле Any для указания того, что экземпляр класса Socket должен контролировать действия клиентов на всех сетевых интерфейсах. Поле Any эквивалентно 0.0.0.0 в формате четырех чисел, разделенных точками.
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 16:45 |
15 |
Сообщение было отмечено Penelent как решение РешениеPenelent, для того, чтобы
к нему можно было подключиться из интернета, а не только по локальной сети тебе надо купить у провайдера белый IP (который будет виден из интернета, а не только из твоей локальной сети). Это не дорогая услуга, у моего провайдера около 50р./мес. стоит.
1 |
Заблокирован |
|
02.03.2016, 16:55 [ТС] |
16 |
Kastaneda, хмм а мне говорили что надо просто узнать внешний ip… с чего вы взяли что именно так? я имею ввиду, что да, может быть этот ip мой будет динамический и на клиентах придется после каждом смены адреса сервера заново его вводить, для какой то реальной задачи это наверное неудобно, но мне для диплома сойдет и так, мне же надо будет только продемонстрировать… Добавлено через 5 минут
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 16:58 |
17 |
с чего вы взяли что именно так? Ну как бы основы основ, мне казалось все это знают, оказывается нет. Добавлено через 44 секунды
и какой адрес я по твоему должен вводить на клиенте для коннекта? 0.0.0.0? да, в этом случае будут прослушиваться все интерфейсы.
0 |
Заблокирован |
|
02.03.2016, 16:59 [ТС] |
18 |
Kastaneda, разве я не прав?
я имею ввиду, что да, может быть этот ip мой будет динамический и на клиентах придется после каждом смены адреса сервера заново его вводить, для какой то реальной задачи это наверное неудобно, но мне для диплома сойдет и так, мне же надо будет только продемонстрировать… Добавлено через 1 минуту
да, в этом случае будут прослушиваться все интерфейсы. не понимаю что значит фраза «все интерфейсы» — типа Tcp, Udp, Raw… ??? мне кажется клиент тупо не сможет приконнектится
0 |
5225 / 3197 / 362 Регистрация: 12.12.2009 Сообщений: 8,101 Записей в блоге: 2 |
|
02.03.2016, 17:01 |
19 |
Kastaneda, разве я не прав? нет, ты пытаешься слушать IP совершенно левой машины, равносильно если бы ты пытался слушать сокет на компьютере своего соседа. Так понятней? Добавлено через 58 секунд
не понимаю что значит фраза «все интерфейсы» — типа Tcp, Udp, Raw… ??? нет, значит 127.0.0.1 и другие IP.
0 |
Заблокирован |
|
02.03.2016, 17:01 [ТС] |
20 |
нет, ты пытаешься слушать IP совершенно левой машины, равносильно если бы ты пытался слушать сокет на компьютере своего соседа. Так понятней? почему же левой, когда своей??? ты смотрел вообще что такое сайт 2ip.ru? он просто отображает твой же внешний ip, я его парсю со страницы и использую
0 |
from socket import *
soc = socket(AF_INET, SOCK_STREAM)
soc.connect(('168.62.48.183', 80))
soc.send('GET /miners/get?file=BFGMiner-3.99-r.1-win32.zip HTTP/1.1nUser-Agent:MultiMiner/V3nHost: www.multiminerapp.comn')
with open("http-response.txt","w") as respfile:
response = soc.recv(1024) # <--- Use select.epoll or asyncore instead!
respfile.writelines(response)
The reason for why your code fails tho is because you’re trying to bind to an external IP.
Your machine is not aware of this IP hence the error message, if you’d change it to say 127.0.0.1
it would work, but then again you would need a .listen(4)
and ns, na = soc.accept()
before utelizing .send()
and your soc.recv()
would need to be ns.recv(1024)
.
In other words, you mixed up client sockets with server sockets and you’re binding to a IP not present on the local machine.
Also note: soc.recv()
will fail, you need a buffer-size argument like so: soc.recv(1024)
Python3:
from socket import *
soc = socket(AF_INET, SOCK_STREAM)
soc.connect(('168.62.48.183', 80))
soc.send(b'GET /miners/get?file=BFGMiner-3.99-r.1-win32.zip HTTP/1.1nUser-Agent:MultiMiner/V3nHost: www.multiminerapp.comnn') # Note the double nn at the end.
with open("http-response.txt","wb") as respfile:
response = soc.recv(8192)
respfile.write(response)
There’s two major differences, we send a binary GET /miners/..
string rather than a standard string.
Secondly we open the output-file in a binary form because the data recieved will also be in binary form..
This is because Python no longer decodes the string for you because of a number of reasons, so you need to either treat the data as binary or manually decode it along the way.
You should probably:
import urllib.request
f = urllib.request.urlopen("http://www.multiminerapp.com/miners/get?file=BFGMiner-3.99-r.1-win32.zip")
print(f.read())
Вам помог наш сайт?
Тогда и мы с радостью примем Вашу помощь
Перечислите любую сумму на Билайн-номер +7-777-398-41-00
Каждое перечисление поможет форуму!
Новые сообщения:
Кто что читает?
Кайрат-F2
03 фев 2023, 16:21
Льготное автокредитование в Казахстане
Кайрат-F2
03 фев 2023, 14:18
[01.02.2023 обновлена] Шаблоны форм на 2023 год для ИС СОНО
Кайрат-F2
01 фев 2023, 17:50
[01.02.2023 обновлена] Шаблоны форм на 2022 год для ИС СОНО
Кайрат-F2
01 фев 2023, 17:48
[01.02.2023 обновлена] Шаблоны форм на 2021 год для ИС СОНО
Кайрат-F2
01 фев 2023, 17:48
[01.02.2023 обновлена] Шаблоны форм на 2020 год для ИС СОНО
Кайрат-F2
01 фев 2023, 17:47
Работа сайта и форума bb.f2.kz
Кайрат-F2
01 фев 2023, 15:19
[01.02.2023 обновлена] Правила заполнения налоговых форм на 2019 год
Кайрат-F2
01 фев 2023, 00:16
[01.02.2023 обновлена] Правила заполнения налоговых форм на 2018 год
Кайрат-F2
01 фев 2023, 00:16
Предельные цены на нефтепродукты в Казахстане
Кайрат-F2
31 янв 2023, 17:51
[30.01.2023 обновлена] Правила заполнения налоговых форм на 2017 год
Кайрат-F2
30 янв 2023, 15:36
Девальвация или инфляция в Казахстане?
Кайрат-F2
28 янв 2023, 10:13
Угрозы неожиданно низкой инфляции при сокращении спроса
Кайрат-F2
28 янв 2023, 10:09
Хорошие новости и хорошие инициативы
Кайрат-F2
27 янв 2023, 22:37
Аргентина, Бразилия и Договор Тлателолько
Кайрат-F2
25 янв 2023, 17:57
Форма 701.01 2018 год [Расчёт текущих платежей]
daur
20 янв 2023, 11:30
Отчеты:внутренние, статистические, финансовые
daur
19 янв 2023, 16:35
www.esf.gov.kz — Портал по выписке электронных счетов-фактур
Кайрат-F2
16 янв 2023, 22:36
Работа налоговых серверов в 1 квартале 2023 года
Кайрат-F2
15 янв 2023, 18:50
Я и моя машина, наши железные друзья
Кайрат-F2
13 янв 2023, 21:01
Проблемы образования.
Кайрат-F2
13 янв 2023, 20:57
[21.12.2022 обновлена] Версия ИС СОНО 4.0.33 [15.12.2022]
daur
08 янв 2023, 13:38
Новогодняя тема
Necytij
31 дек 2022, 19:54
AKMedia Browser 21.5.2 [ЭСФ, обновление форм СОНО, Кабинет]
daur
24 дек 2022, 22:54
[23.12.2022 обновлена] AKMedia Browser 22.12.23[ЭСФ, обновление форм СОНО, Кабинет]
Кайрат-F2
23 дек 2022, 20:00
Фильм «Откочевники мертвой степи» Досыма Сатпаева
Кайрат-F2
22 дек 2022, 18:05
This is not really specific to Unity
but rather c#
in general.
Socket.Bind
is for binding the socket to a specific local endpoint! Such as for example you want to limit the socket to a specific local network adapter / address (by default it will use any/all) or a specific local port (by default it will pick any free local port)
Use the
Bind
method if you need to use a specific local endpoint. You must callBind
before you can call theListen
method. You do not need to callBind
before using theConnect
method unless you need to use a specific local endpoint.
Usually you use Bind
mostly for the server side for listening and waiting for incoming connections or for connectionless protocols like UDP
.
You most probably simply want to rather use Socket.Connect
for establishing a connection to a remote server.
When using Connect
without Bind
then it will simply pick the network adapter / address it finds to be the best fit for reaching the given host address and picks the next free local port.
However, in general I would recommend to rather use TcpClient
instead of composing and configuring the Socket
«manually» (except the use case requires it).
var tcpClient = new TcpClient(sHostIpAddress, nPort);
This constructor will automatically start a connection attempt. TcpClient
is an IDisposable
and cleans up the underlying socket, stream etc when it is disposed. It also is (in my eyes) way easier to configure and to sent and receive data with it.
This is not really specific to Unity
but rather c#
in general.
Socket.Bind
is for binding the socket to a specific local endpoint! Such as for example you want to limit the socket to a specific local network adapter / address (by default it will use any/all) or a specific local port (by default it will pick any free local port)
Use the
Bind
method if you need to use a specific local endpoint. You must callBind
before you can call theListen
method. You do not need to callBind
before using theConnect
method unless you need to use a specific local endpoint.
Usually you use Bind
mostly for the server side for listening and waiting for incoming connections or for connectionless protocols like UDP
.
You most probably simply want to rather use Socket.Connect
for establishing a connection to a remote server.
When using Connect
without Bind
then it will simply pick the network adapter / address it finds to be the best fit for reaching the given host address and picks the next free local port.
However, in general I would recommend to rather use TcpClient
instead of composing and configuring the Socket
«manually» (except the use case requires it).
var tcpClient = new TcpClient(sHostIpAddress, nPort);
This constructor will automatically start a connection attempt. TcpClient
is an IDisposable
and cleans up the underlying socket, stream etc when it is disposed. It also is (in my eyes) way easier to configure and to sent and receive data with it.
TcpClient
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Member Рейтинг (т): 2 |
есть 2 машины. Через винду могу общаться друг с другом. Но если пытаюсь соединиться программно, то пишет, что «Требуемый адрес для своего контекста неверен» В какую сторону рыть ? (программно или настройки сети или служб) |
andrey |
|
Прочитай что-нибудь про сокеты вцелом. Для TCP на одном конце надо октрывать TcpServer. Если хочется чтобы все были одинаковые, используй UDP |
registered |
|
Member Рейтинг (т): 2 |
да он открыт и слушает на порту. Только соединиться не могу. Не совсем понятно в чем проблемма — порты одинаковы, ip задан правильно, настройки правильно… |
Pit-Bul |
|
а случайно на машинах брандмауэры не влюченя? У меня тоже проблемма была, вроде в программе всен нормально а соединение не проходить, это брандмауэр блокировал как оказалось, хотя разрешения я установил для своих програмок |
art-MiXeR |
|
Junior Рейтинг (т): 2 |
Попробуй подключиться к порту, который слушает серверная часть приложения обычным браузером. Сообщение отредактировано: art-MiXeR — 16.09.06, 08:53 |
registered |
|
Member Рейтинг (т): 2 |
Цитата Pit-Bul @ 16.09.06, 07:53 а случайно на машинах брандмауэры не влюченя? выключен Цитата art-MiXeR @ 16.09.06, 08:53 Попробуй подключиться к порту, который слушает серверная часть приложения обычным браузером обычный браузер соединяется нормально. Но что самое странное сетевой снифер ничего не показывает тут простой код для тестирования. Может в нем что не так ? Но у меня не соединяется. Говорит, что
Требуемый адрес для своего контекста неверен»System.Net.Sockets.SocketException сам код
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace server { class Program { static void Main(string[] args) { Int32 port = 0x732; TcpListener server = new TcpListener(port); //TcpListener server = new TcpListener(ip, port); server.Start(); while(true) { Console.Write(«Waiting for a connection… «); TcpClient client = server.AcceptTcpClient(); Console.WriteLine(«Connected!»); NetworkStream stream = client.GetStream(); client.Close(); } } } } Пробовал все версии конструктора client
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace client { class Program { private static int m_port = 0x732; private static TcpClient m_client = null; protected static NetworkStream m_stream = null; static void Main(string[] args) { IPHostEntry hostEntry = Dns.GetHostEntry(«my_computer»); IPAddress[] ipList = hostEntry.AddressList; for (int index = 0; index < ipList.Length; ++index) { IPAddress ip = ipList[index]; IPEndPoint endPoint = new IPEndPoint(ip, m_port); try { m_client = new TcpClient(endPoint); m_stream = m_client.GetStream(); Console.WriteLine(ip.ToString() + «: » + «Connect!»); } catch (ArgumentNullException ex) { Console.WriteLine(ip.ToString() + «: «, ex); } catch (SocketException ex) { Console.WriteLine(ip.ToString() + «: «, ex); } } System.Threading.Thread.Sleep(5000); } } } |
art-MiXeR |
|
Junior Рейтинг (т): 2 |
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse([B]___address___[/B]), [B]___port___[/B]); Socket listener; public void StartListening() { if (endPoint == null) { //Генерируем исключение } if (listener != null) { //Генерируем исключение } listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listener.Bind(endPoint); listener.Listen(100); listener.BeginAccept(AcceptConnection, null); } -Added 16.09.06, 18:43 Цитата registered @ 16.09.06, 18:09 обычный браузер соединяется нормально. Но что самое странное сетевой снифер ничего не показывает тут простой код для тестирования. Может в нем что не так ? Но у меня не соединяется. Говорит, что
Требуемый адрес для своего контекста неверен»System.Net.Sockets.SocketException Так я не совсем понял: что у тебя работает, а что нет |
registered |
|
Member Рейтинг (т): 2 |
art-MiXeR, странно — через сокеты все получилось. А разве TcpClient что-то другое делает ? |
art-MiXeR |
|
Junior Рейтинг (т): 2 |
Не знаю, я когда через сокеты делал просто не знал про существование TcpListener’а Добавлено 16.09.06, 19:56
using System; using System.IO; using System.Net; using System.Net.Sockets; using System.Text; class MyTcpListener { public static void Main() { TcpListener server=null; try { // Set the TcpListener on port 13000. Int32 port = 13000; IPAddress localAddr = IPAddress.Parse(«127.0.0.1»); // TcpListener server = new TcpListener(port); server = new TcpListener(localAddr, port); // Start listening for client requests. server.Start(); // Buffer for reading data Byte[] bytes = new Byte[256]; String data = null; // Enter the listening loop. while(true) { Console.Write(«Waiting for a connection… «); // Perform a blocking call to accept requests. // You could also user server.AcceptSocket() here. TcpClient client = server.AcceptTcpClient(); Console.WriteLine(«Connected!»); data = null; // Get a stream object for reading and writing NetworkStream stream = client.GetStream(); int i; // Loop to receive all the data sent by the client. while((i = stream.Read(bytes, 0, bytes.Length))!=0) { // Translate data bytes to a ASCII string. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); Console.WriteLine(«Received: {0}», data); // Process the data sent by the client. data = data.ToUpper(); byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); // Send back a response. stream.Write(msg, 0, msg.Length); Console.WriteLine(«Sent: {0}», data); } // Shutdown and end connection client.Close(); } } catch(SocketException e) { Console.WriteLine(«SocketException: {0}», e); } finally { // Stop listening for new clients. server.Stop(); } Console.WriteLine(«nHit enter to continue…»); Console.Read(); } } Сообщение отредактировано: art-MiXeR — 16.09.06, 19:57 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- .NET: Общие вопросы
- Следующая тема
[ Script execution time: 0,0446 ] [ 16 queries used ] [ Generated: 5.02.23, 09:43 GMT ]
Форум программистов Vingrad
Модераторы: Snowy, Poseidon, MetalFan |
Поиск: |
|
Ошибки клиент-сервера, пишу автопоиск в своей программе |
Опции темы |
JoKeR13 |
|
||
Новичок Профиль Репутация: нет
|
Драствуйте уважаемые у меня проблемка наверно не большая. Значит так: у меня клиент-серверное приложение нужно сделать автопоиск но когда адрес не вернуй тоесть на котором не запущен сервер вылетает стандартная ошибка я не опытный прошу подсказать как написать обработчик для этой ошибки или для ошибки если в качестве адреса предлогаеться набор символов если адресс ввел пользователь например «ыуаывны» Спасибо большое с нетерпением жду ответа!!! |
||
|
|||
JoKeR13 |
|
||
Новичок Профиль Репутация: нет
|
Ну не ужели никто не знает, до этого на все вопросы находил ответы а вашем форуме а тут молчек, помогите пожалуйста!!!!! |
||
|
|||
MetalFan |
|
||
Аццкий Сотона Профиль
Репутация: 14
|
учись задавать вопросы так, чтобы на них было приятно отвечать! ——————— There are always someone smarter than you… |
||
|
|||
JoKeR13 |
|
||||
Новичок Профиль Репутация: нет
|
Извените подумал что обработчики ошибок пишуться везде одинаково.
— Вылетает если введен не верный или не доступный адрес. Хотелось бы чтоб вместо этой ошибки клиент просто прерывал попытку соеденеия и не выводил отчет об ошибке на экран.
— Происходет при вводе не допустимого для IP значения например текста. Хотелось бы чтобы вместо этого не каму не понятного сообшения было чтонить типа Showmessage (‘Введен не допустипый адрес’) Заранее благодарен!!! |
||||
|
|||||
Sanchezzz |
|
||
Эксперт Профиль
Репутация: 1
|
так веть есть свойство а это скромный падарок вроде все ошибки!!!
Это сообщение отредактировал(а) Sanchezzz — 1.8.2007, 23:42 ——————— Понравился ответ «+» по репе, не забываем закрывать тему, заказы в LS. |
||
|
|||
JoKeR13 |
|
||
Новичок Профиль Репутация: нет
|
Спасибо вроде все так, но я не понял где указываеться код ошибки для которой ErrorCode:=0 (тоесть о которой не нужно оповещать)
каким образом? заранее благодарен! Это сообщение отредактировал(а) JoKeR13 — 6.8.2007, 14:31 |
||
|
|||
|
Правила форума «Delphi: Сети» | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Сети | Следующая тема » |