Перейти к содержимому

Как подключиться по tcp

  • автор:

Немогу подключиться к TCP/IP серверу

Запустил сервер но почему-то не могу к нему подключиться Вот сервер :

// 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("localhost"); 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("Ожидаем соединение через порт ", 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("") > -1) < Console.WriteLine("Сервер завершил соединение с клиентом."); break; >handler.Shutdown(SocketShutdown.Both); handler.Close(); > > catch (Exception ex) < Console.WriteLine(ex.ToString()); >finally < Console.ReadLine(); >> > > 

Вот клиент :

 #include #include #include /* hton, ntoh и проч. */ #include #include #include int main(int argc, char * argv[]) < /*объявляем сокет*/ int s = socket( AF_INET, SOCK_STREAM, 0 ); if(s < 0) < perror( "Error calling socket" ); return 0; >/*соединяемся по определённому порту с хостом*/ struct sockaddr_in peer; peer.sin_family = AF_INET; peer.sin_port = htons( 11000 ); peer.sin_addr.s_addr = inet_addr( "127.0.0.1" ); int result = connect( s, ( struct sockaddr * )&peer, sizeof( peer ) ); if( result ) < perror( "Error calling connect" ); return 0; >/*посылаем данные * * Если быть точным, данные не посланы, а записаны где-то в стеке, когда и как они будут * отправлены реализации стека TCP/IP виднее. Зато мы сразу получаем управление, не * дожидаясь у моря погоды.*/ char buf[] = "Hello, world!"; result = send( s, "Hello, world!", 13, 0); if( result /* закрываем соединения для посылки данных */ if( shutdown(s, 1) < 0) < perror("Error calling shutdown"); return 0; >/* читаем ответ сервера */ fd_set readmask; fd_set allreads; FD_ZERO( &allreads ); FD_SET( 0, &allreads ); FD_SET( s, &allreads ); for(;;) < readmask = allreads; if( select(s + 1, &readmask, NULL, NULL, NULL ) if( FD_ISSET( s, &readmask ) ) < char buffer[20]; memset(buffer, 0, 20*sizeof(char)); int result = recv( s, buffer, sizeof(buffer) - 1, 0 ); if( result < 0 ) < perror("Error calling recv"); return 0; >if( result == 0 ) < perror("Server disconnected"); return 0; >if(strncmp(buffer, "Hi, dear!", 9) == 0) printf("Got answer. Success.\n"); else perror("Wrong answer!"); > if( FD_ISSET( 0, &readmask ) ) < printf( "No server response" ); return 0; >> return 0; > 

А вот что он мне даёт на выходе: клиент сервер сервер и клиент подключены к одному и тому же «разветвителю». Почему то не подключается, увы так и не понял почему. SocketServer.cs

 // Устанавливаем для сокета локальную конечную точку IPHostEntry ipHost = Dns.GetHostEntry("localhost"); //несработало "172.16.8.169" // IPAddress ipAddr = ipHost.AddressList[0]; IPAddress ipAddr = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0]; IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); 

client.c добавил:

 peer.sin_port = htons( 11000 ); peer.sin_addr.s_addr = inet_addr( "172.16.8.169" ); int result = connect( s, ( struct sockaddr * )&peer, sizeof( peer ) ); 

Почемуто не сработало вот вызов ifconfig : На сервере На сервере На клиенте На клиенте пинг пингуеться :

comp@comp0:~/Qt_project/TCP_CP$ ping 172.16.8.169:11000 ping: 172.16.8.169:11000: Неизвестное имя или служба comp@comp0:~/Qt_project/TCP_CP$ ping 172.16.8.169 PING 172.16.8.169 (172.16.8.169) 56(84) bytes of data. 64 bytes from 172.16.8.169: icmp_seq=1 ttl=64 time=1.39 ms 64 bytes from 172.16.8.169: icmp_seq=2 ttl=64 time=1.31 ms 64 bytes from 172.16.8.169: icmp_seq=3 ttl=64 time=1.23 ms 64 bytes from 172.16.8.169: icmp_seq=4 ttl=64 time=1.36 ms 64 bytes from 172.16.8.169: icmp_seq=5 ttl=64 time=1.32 ms 64 bytes from 172.16.8.169: icmp_seq=6 ttl=64 time=1.30 ms ^C --- 172.16.8.169 ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5006ms rtt min/avg/max/mdev = 1.237/1.322/1.394/0.056 ms 

Вроде бы по ответу @Геннадия П всё верно и логически всё представлено верно но, почему то как то «не звучит цветомузыка».

Автоматическое назначение IP-адресов

Небольшое отступление. IP-адрес.
Каждый компьютер (или другое сетевое устройство) должен иметь уникальный (несовпадающий с другими) адрес. В Интернете, да и в любой современной сети, для связи используется протокол TCP/IP, уникальный адрес (так называемый, IP-адрес) для этого протокола состоит из 4-х групп цифр, например, 10.0.23.167. В одной и той же сети не может быть совпадающих IP-адресов, в противном случае выйдет конфликт адресов, и связь будет невозможна.

Рассмотрим вариант, когда несколько компьютеров подсоединяются к маршрутизатору для выхода в Интернет через порты ethernet внутренней сети и/или беспроводным путем, если маршрутизатор поддерживает Wi-Fi.

Почти любой Интернет-маршрутизатор способен назначать IP-адреса автоматически, так как там работает встроенная служба выдачи адресов (так называемый DHCP-сервер). При этом нет необходимости настраивать эти адреса на компьютерах: обо всем позаботится эта служба, если только Windows настроена по умолчанию, то есть на автоматическую настройку параметров TCP/IP. Как понять, что компьютеры получили адреса автоматически? Для этого в Windows XP нужно выбрать Пуск –> Настройка –> Панель управления –> Сетевые подключения –> Подключение по локальной сети, открыть его свойства, найти в списке Протокол Интернета TCP/IP и открыть его свойства. Если там выбрана опция «Получить IP-адрес автоматически», и при этом Вы свободно можете выйти в Интернет, значит, используется DHCP-сервер маршрутизатора:

Автоматическая настройка параметров TCP/IP

Этого достаточно для успешной работы в сети Интернет, но вот для обмена информацией между компьютерами внутри сети нужна дополнительная настройка. Итак, мы уже не заботимся о ручной настойке IP-адресов, они правильно назначены маршрутизатором, теперь нужно добиться, чтобы каждый компьютер «видел» в сети все остальные. Об этом немного ниже, а пока опишем ситуацию, когда нужно назначить IP-адреса вручную.

Ручная конфигурация IP-адресов

Может случиться так, что DHCP-сервер не работает на маршрутизаторе, а, может, и никакого маршрутизатора вообще нет, ведь необязательно компания должна иметь выход в Интернет, можно использовать обычный сетевой коммутатор, то есть более простое устройство, не имеющее функции DCHP-сервера. В этом случае просто необходимо вручную назначить IP адреса для связи между компьютерами. Для того, чтобы определить, что у вас присутствует именно эта ситуация и вам нужно настраивать IP-адреса вручную, необходимо знать модель вашего маршрутизатора или коммутатора. Различных моделей на рынке присутствует очень много и в рамках этой статьи мы не можем дать единой методики определения, поэтому просто расскажем о ручной настройке IP-адресов.Сначала определимся, какую адресацию выделить на сеть. Существует так называемый частный диапазон IP адресов, который можно использовать для корпоративных, домашних и прочих сетей, не имеющих непосредственного выхода в Интернет. Возьмем, к примеру, такую сеть: 192.168.100.xxx, где xxx номер, уникальный для каждого компьютера, тогда как левая часть адреса будет неизменной для всех. То есть можем взять адрес 192.168.100.5 для одного компьютера, 192.168.100.6 для другого и так далее. Чтобы назначить адрес в Windows XP нужно выбрать Пуск –> Настройка –> Панель управления –> Сетевые подключения –> Подключение по локальной сети, открыть его свойства, найти в списке Протокол Интернета TCP/IP и открыть его свойства. Там выбрать «Использовать следующий IP-адрес» и ввести первый адрес. Маску подсети указать 255.255.255.0.

Для Windows 7 адрес назначается похожим образом: нужно выбрать Пуск –> Настройка –> Панель управления –> Центр управления сетями и общим доступом –> Изменение параметров адаптера –> Подключение по локальной сети, открыть его свойства, найти в списке Протокол Интернета TCP/IP и открыть его свойства. Там нужно задать новый IP-адрес, обеспечив, разумеется, различие с другими компьютерами в последней (и ТОЛЬКО в последней!) группе цифр. В случае, если офис не имеет выхода в Интернет через маршрутизатор, можно больше ничего не менять, этого будет достаточно. Если маршрутизатор есть, но автоматическая выдача адресов (DHCP-сервер) не работает, нужно сначала узнать, какой IP-адрес назначен на внутреннем интерфейсе маршрутизатора (обычно это 192.168.0.1 или 10.0.0.1) и указать этот адрес в свойствах TCP/IP в качестве Основного шлюза и DNS-сервера:

Ручная настройка параметров TCP/IP

Проверяется правильная настройка IP адресов с помощью команды ping. Нажмите Пуск – Выполнить, введите слово cmd и нажмите OK. В открывшемся окне в командной строке запустите команду (для наших примеров) ping 192.168.100.1, затем ping 192.168.100.5 и т.д. В случае правильной настройки Вы должны получить ответ от удаленного устройства, если нет, ищите ошибку в цифрах:

TCP подключение

Этот сервис дает возможность протестировать TCP подключение к любому порту любого IP адреса или веб-сайта из различных мест и стран. Проверьте состояния портов на сервере легким способом.

Например Вы можете проверить новый порт для SSH у вашего сервера на доступность из различных точек земного шара. Мониторинг веб-сайта или мониторинг любого другого сервиса с помощью этого инструмента может сэкономить значительное время системному администратору.

Примеры:

Что такое TCP/IP

TCP/IP (Transmission Control Protocol/Internet Protocol) – это модель передачи цифровых данных. Протокол передачи TCP/IP описывает правила передачи данных, стандарты связи между компьютерами, а также содержит соглашения о маршрутизации и межсетевом взаимодействии.

Что такое протокол и для чего он нужен? Протокол – это набор правил, благодаря которым устройства обмениваются данными через интернет. Эти правила сообщают устройствам о том:

  • Как начинать общение и приветствовать другую сторону.
  • Как договориться с другим устройством о параметрах передачи данных.
  • Что делать при ошибках.
  • Как узнать, что передача данных закончена.

Сетевые протоколы TCP/IP обеспечивает связь между устройствами, работающими через интернет. Обычно эти устройства называют хостами. Хотя существуют и другие протоколы передачи данных, TCP/IP выделяется тем, что при его работе обеспечивается аппаратная независимость.

Это значит, что работа протокола не зависит от особенностей аппаратного обеспечения, он позволяет организовать обмен данными между любыми устройствами с различной технологией передачи данных. Кроме этого, сетевая модель TCP/IP определяет стандарты для множества различных служб связи конечных пользователей.

Благодаря TCP/IP возможны такие действия:

  • Передача данных в другую систему.
  • Вход в удаленную систему.
  • Управление сетью.
  • Отправка сообщений удаленным пользователям.
  • Выполнение удаленных команд.
  • Печать файлов из удаленной системы.

Как работает TCP/IP

TCP и IP два отдельных протокола, работающие вместе. Они образуют стек протоколов надежной передачи данных. Стек протоколов TCP/IP различают два типа сокетов TCP (потоковые) и UDP (датаграммные). Подробнее о сокетах расскажем далее.

UDP – простой протокол с минимальной дополнительной нагрузкой, он подходит для отправки небольших сообщений, когда не важна надежность при передаче данных. Протокол TCP – выполняет проверку доставки всех файлов адресату и проверяет не было ли ошибки при передаче информации. TCP может повторно запросить данные, если они были потеряны и регулировать загрузку сети.

Стек протоколов TCP/IP позволяет обеспечивать доставку информации в необходимое место назначения. IP определяет адрес доставки, а TCP отвечает за процесс передачи и доставки данных. Для более наглядного примера предположим, что IP – это адрес электронной почты, а TCP — это почтовый клиент, с помощью которого происходит отправка сообщений.

Протоколы используются вместе, чтобы информация имела место назначения, а сам процесс происходил безопасно.

Для работы протоколов необходима установка TCP/IP – специального программного обеспечение. Обычно, оно устанавливается с операционной системой и не требует скачивания дополнительных программ.

Как настроить TCP/IP

Настройка TCP/IP происходит в разделе основных настроек компьютера.

Windows

  1. В меню Пуск выберите Сеть и интернет.
  2. Далее перейдите в раздел Ethernet.
  3. В открывшемся окне найдите пункт Настройка параметров адаптера.
  4. Затем снова выберите пункт Ethernet, нажав на него правой кнопкой мыши, и выберите раздел свойства.
  5. В открывшемся окне двойным щелчком по левой кнопке мыши выберите пункт IP версии 4 (TCP/IPv4).
  6. В новом окне отметьте точками: Получить IP-адрес автоматически и Получить адрес DNS-сервера автоматически.
  7. На вкладке Альтернативная конфигурация отметьте точку Автоматический частный IP-адрес.
  8. Нажмите ОК, чтобы сохранить настройки.

MacOS

  1. Выберите меню Apple и перейдите в Системные настройки.
  2. Зайдите в раздел Сеть.
  3. Слева выберите сетевую службу, которую используете.
  4. Далее нажмите Подробнее.
  5. Выберите раздел TCP/IP.
  6. Для адреса IPv4, кликните всплывающее меню «Конфигурация IPv4».
  7. Выберите здесь один из вариантов, потом введите адрес IPv4, маску подсети и адрес маршрутизатора.
  8. Для адреса IPv6, кликните всплывающее меню «Конфигурация IPv6»
  9. Выберите один из вариантов, потом введите адрес маршрутизатора, адрес IPv6 и длину префикса.
  10. Если у вас есть ID клиента DHCP, укажите его.
  11. Нажмите ОК.

Что такое сокеты

Сокет — это программный механизм, который обеспечивает сетевое взаимодействие, помогает осуществлять передачу информации от одного компьютера к другому. Он представляет собой конструкцию, состоящую из IP-адреса и номера порта.

Сокет был придуман для того, чтобы облегчить программистам процесс написания кодов. При работе с сокетами программистам не надо разбираться с IP и портами, при программировании он указывает, что хочет создать сокет и обозначает для него IP-адрес. Программа, в которой работает специалист, создает сокет. Далее информация отправляется и принимается в сокете, а программа отвечает за ее передачу.

Основное назначение сокетов – передача данных через сеть и обеспечение связи между различными приложениями.

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

Чтобы к серверу можно было одновременно подключиться нескольким приложениям, сервер делает копии сокетов.

Для чего нужны порты

Сетевые порты представляют собой 16-ти битное число от 1 до 65535, которое определяет назначение пакетов данных в пределах одного хоста. Они необходимы, чтобы осуществлять передачу информации определенного вида. Все хосты передают данные при помощи IP-адресов, когда происходит подключение к сети, порты определяют к какой программе относятся передаваемые файлы. Основные программы это:

  • Web-сервер, для трансляции с веб-сайтов.
  • Почтовый сервер, для обмена электронными письмами.
  • FTP-сервер, для передачи информации.

Например, пользователь на своем ноутбуке открывает браузер и вбивает поисковый запрос, веб-сервер при этом автоматически отправляет данные по протоколу TCP/IP в порт 80.

При работе с почтовым клиентом Outlook используется два стандартизированных порта: порт 110 – для получения электронных сообщений и порт 25 – для отправки писем к адресату.

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

Что можно делать с портом

  • Открыть. Чтобы знать куда направлять данные, которые пришли по адресу порта.
  • Закрыть. Чтобы прекратить передачу данных.
  • Пробросить. Если запрос пришел на порт 1020, отправить его на порт 2020.
  • Просканировать. То есть проверить числа от 0 до 65535 на предмет ответа от кого-то из них. Если ответ найден, то это будет означать, что на этом порту работает какая-то программа. Это поможет найти уязвимости и вредоносные программы.
  • Заблокировать. Например, для того, чтобы не допустить посторонних к открытому порту.
  • Задать. Если для работы программы требуется порт, который у вас заблокирован, ей можно создать другой порт и проводить обмен данными через него.

Уровни протоколов TCP/IP

Одной из основных и первых моделей передачи данных была OSI (The Open Systems Interconnection model). В соответствии с ней происходит работа сетевых протоколов, так как она устанавливает основные требования и правила. Модель OSI состоит из семи уровней, каждый из них определяет нормы сотрудничества систем между собой:

  • Прикладной уровень
  • Сеансовый уровень
  • Уровень представления
  • Транспортный уровень
  • Сетевой уровень
  • Канальный уровень
  • Физический уровень

Несколько протоколов, работающих по определенным уровням, называют стеком протоколов. Современный интернет работает на стеке протоколов TCP/IP. Различают следующие уровни стека TCP/IP:

Регулирует работу сетевых приложений, например, браузеры, программы для загрузки файлов по ftp , почтовые клиенты, SSH . Эти программы могут использовать свои протоколы обмена данными.

На прикладном уровне передача информации осуществляется путем передачи пакета с данными от одного сетевого узла к другому. Пересылка данных от хоста-отправителя к хосту-получателю осуществляется при помощи протокола IP, который сообщает адрес получателя и указывает номер порта. Благодаря IP сеть определяет откуда пришел пакет данных и куда его следуют отправить.

Комбинация IP-адреса и номера порта передачи данных называется сокетом. Определенные порты используют для упрощения стандартов, каждый порт соответствует функциональному назначению приложения (Например, почтовый SMTP-сервер использует 25 порт).

Работу этого уровня определяют протоколы TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). Протокол TCP анализирует переданные пакеты информации и, в случае ошибки, повторно запрашивает пакеты. Также он следит за верной последовательностью переданных пакетов. UDP – протокол без установки соединения, он выполняет небольшую проверку и считается ненадежным. Отправка информации с помощью UDP выполняется быстрее по сравнению с TCP.

Передача данных начинается с установки соединения: хост-клиент отправляет фрагмент данных с номером последовательности и флагом SYN (служит для обозначения начала установки соединения). Сервер выделяет память для обработки задачи и назад отправляет фрагмент с номером последовательности и флагами SYN и ACK (служит для обозначения получения подтверждения).

Получив флаг SYN, хост-клиент отправляет сегмент с флагом ACK, в том случае, когда этот флаг узел уже получил, включается режим ESTABLISHED ( или активное соединение). Если, повторив свой запрос, хост не получает ответа, то через некоторое время включается режим CLOSED (или завершение сеанса связи):

  • Хост-получатель шлет хосту-отправителю флаг FIN (конец передачи данных).
  • Узел возвращает флаги ответа ACK, FIN о завершении связи.
  • Хост-клиент устанавливает соединение, и шлет хосту сигнал о завершении сессии в виде флага ACK (получение подтверждения).
  1. Межсетевой или сетевой уровень TCP/IP

Так как глобальная сеть объединяет в себе множество локальных сетей, то сетевой уровень нужен для регламентирования передачи данных и взаимодействия локальных сетей.

Основные функции межсетевого уровня: доставка пакетов с информацией между сетями, выбор оптимального пути перемещения данных, согласование разных технологий передачи информации, фильтрация трафика, предотвращение перегрузок при передаче.

IP (Internet Protocol) – основной протокол межсетевого уровня. Он отвечает за перемещение пакетов между подсетями — от одного пограничного маршрутизатора до другого, пока данные не достигнут сети назначения.

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

Чаще всего на этом уровне используют протокол Ethernet, он определяет проводные соединения и электросигналы на физическом уровне. Когда хост собирается передать пакет информации, он проверяет свободен ли канал в этот момент (по наличию несущей частоты в кабеле). Если частота не найдена, то начинается передача данных. Передача информации ограничивается по времени, она не может превышать, а также быть меньше заданной величины. Это необходимо для предотвращения единоличного использования сети одним компьютером и доступом к сети другим пользователям.

Зачем нужны уровни сетевой модели TCP/IP? Передача файлов между двумя хостами напрямую невозможна. Сначала пакеты данных попадают на сетевой уровень, чтобы получить IP-адрес. На транспортном уровне, с помощью протокола TCP, отдельные части данных передаются хосту. На каждом уровне к передаваемым файлов добавляется служебная информация: например, указание порта, чтобы распознать приложение. Кроме того, информацию могут добавлять протоколы Ethernet, IP, TCP и другие.

Такое наслоение правил и дополнительной информации называется стеком. Таким образом, стек – набор сетевых протоколов с иерархической структурой. Главная задача стека – достаточный набор правил, который обеспечивает взаимодействие устройств в интернете.

Чтобы все протоколы могли работать одновременно и не конфликтовали между собой, были выделены уровни стека протоколов TCP/IP. Каждый уровень решает свою определенную задачу, что снижает возникновение сбоев и незавершенных операций.

Заключение

Протокол интернета TCP/IP популярен своей возможностью реализовать широкий набор функций: совместное использование файлов, принтеров, удаленный доступ к системам и серверам. Стек TCP/IP – надежный набор протоколов, благодаря которым легко налаживаться работа приложений, а управление маршрутизацией удобно настраивается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *