![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| JohnnyQ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.7.2007 Где: Санкт_Петербург Репутация: нет Всего: нет |
Здравствуйте!
Изучаю клиент-серверное взаимодействие в Java. Вот возник вопрос: Как клиенту со своего заданного порта подключиться к заданному порту сервера. С портом сервера понятно - Socket(port). А как клиенту установить свой порт? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Socket - это как раз клиентский сокет, а серверный это ServerSocket. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| JohnnyQ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.7.2007 Где: Санкт_Петербург Репутация: нет Всего: нет |
да, это понятно. С помощью Socket мы можем отправить данные на определенный порт, но неизвестно с какого порта. А вот как установить этот свой порт(например, если я хочу отправлять данные с порта 1234 на порт клиента 5678)??? Это сообщение отредактировал(а) JohnnyQ - 13.12.2009, 23:31 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Egik2 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 302 Регистрация: 29.7.2008 Где: Агудзера Репутация: 1 Всего: 11 |
Ты уверен, что так будет работать? Когда-то сталкивался с этим вопросом, правда в Perle, так и не смог найти решения. Одно время также интересовался реализацией сокетов в Unixe - его системные вызовы, там тоже не нашел примитивов, которые позволили бы определить порт, с которого ты цепляешься к серверному сокету, он выделяется динамически средствами ОС. Дальше, посмотрев твой совет попробовал:
Здесь плюется exception: java.net.SocketException: Invalid argument or cannot assign requested address at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:519) at java.net.Socket.connect(Socket.java:469) at java.net.Socket.<init>(Socket.java:366) at java.net.Socket.<init>(Socket.java:267) at SocketClient.main(SocketClient.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) Ставлю вместо строки 10 Socket c = new Socket(InetAddress.getByName("ya.ru"), 80, InetAddress.getLocalHost(), 55678); строку Socket c = new Socket(InetAddress.getByName("ya.ru"), 80); Все работает. Если ты мне представишь пример, где можно прибиндить сокет на определенный локальный порт, буду тебе очень очень благодарен. Это сообщение отредактировал(а) Egik2 - 14.12.2009, 17:42 -------------------- Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall) a-nav.com developer-blog.ru world-poetry.org |
||||
|
|||||
| JohnnyQ |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 22.7.2007 Где: Санкт_Петербург Репутация: нет Всего: нет |
а у меня все заработало...
LSD, спасибо! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Egik2,
У меня все работает. Ты под админом запускаешь? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Egik2 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 302 Регистрация: 29.7.2008 Где: Агудзера Репутация: 1 Всего: 11 |
Нет, не под админом.
Может в самом деле в этом проблема? Порт же вроде высокий (>1024). -------------------- Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall) a-nav.com developer-blog.ru world-poetry.org |
|||
|
||||
| Egik2 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 302 Регистрация: 29.7.2008 Где: Агудзера Репутация: 1 Всего: 11 |
И еще тогда вопрос.
Если я намертво фиксирую номер порта, ведь может сложиться ситуация, когда текущий номер уже используется, и произойдет ошибка. Не лучше ли возложить ответственность за выделения на ОС? -------------------- Три великие добродетели программиста: лень, нетерпение и самомнение (Larry Wall) a-nav.com developer-blog.ru world-poetry.org |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Это вообще единственный способ который стоит использовать. А задавать локальный порт, нужно только в совсем уж исключительных ситуациях. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |