Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/55: Рейтинг темы: голосов - 55, средняя оценка - 4.84
1 / 1 / 0
Регистрация: 09.10.2010
Сообщений: 36

TcpListener и Tcpclient

05.12.2010, 17:40. Показов 11400. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как с ними работать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2010, 17:40
Ответы с готовыми решениями:

TcpClient и TcpListener
Помогите разобраться. Текст сервера: //Создаем TcpListener IPAddress ipLocal =...

TcpClient и TcpListener
Как отправлять данные не по локальной сети а через интернет? Например у меня есть айпи который выдал провайдер и айпи который моему компу...

C#/C++ .NET TcpListener + TcpClient
Всем привет. Пишу курсач. Есть сервер с файлами, есть клиенты. Клиенты от сервера вначале должны получить списки файлов сервера +...

11
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
06.12.2010, 10:39
В принципе с ними работать довольно просто
вот пример тср-сервера:

VB.NET
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
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Module Module1
 
    Sub Main()
        Try
            'Тcp- слушатель, по ip-адресу 127.0.0.1 порт=2233
            Dim ip As IPAddress = IPAddress.Parse("127.0.0.1")
            Dim listener As TcpListener = New TcpListener(ip, 2233)
            'Начинаем прослушивание
            listener.Start()
            'Создаем клиента для принятия данных
            Dim client As TcpClient = listener.AcceptTcpClient()
            Dim ns As NetworkStream = client.GetStream()
            Dim connected As Boolean = True
            While connected = True
 
                'буффер для полученных данных
                Dim buffer() As Byte = New Byte(200) {}
                'считываем данные
                ns.Read(Buffer, 0, Buffer.Length)
                'Отображаем данные
                Console.WriteLine(Encoding.UTF8.GetString(Buffer))
            End While
 
            ns.Close()
            Console.ReadLine()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub
End Module
и код тср-клиента:
VB.NET
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
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Module Module1
 
    Sub Main()
        Try
           
            'Создаем клиента 
            Dim tc As Sockets.TcpClient = New Sockets.TcpClient()
            'Подключаемся, используя имя хоста и порт
            tc.Connect("localhost", 2233)
            'Получаем экземпляр NetworkStream для отправки данных
            Dim ns As NetworkStream = tc.GetStream()
            Dim connected As Boolean = True
            While connected = True
 
                Console.WriteLine("Введите сообщение")
                Dim body As String = Console.ReadLine()
 
                'Перекодируем введенное сообщение в набор байтов
                Dim message() As Byte = Encoding.UTF8.GetBytes(body)
 
                'считываем данные
                ns.Write(message, 0, message.Length)
 
            End While
            tc.Close()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Sub
End Module
сначала запускаешь сервер, а потом клиента.
2
2 / 2 / 2
Регистрация: 11.10.2010
Сообщений: 186
16.02.2011, 09:42
помогите разобраться:

вот по аналогии:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    Public Sub TcpGetTest()
        Dim Test As String
        Try
            Dim tc As System.Net.Sockets.TcpClient = New System.Net.Sockets.TcpClient()
            tc.Connect(Form1.TextBox1.Text, Form1.ComboBox15.Text)
            Dim ns As System.Net.Sockets.NetworkStream = tc.GetStream()
            Dim connected As Boolean = True
            While connected = True
                Dim body As String = "TEST"
                Dim message() As Byte = System.Text.Encoding.UTF8.GetBytes(body)
                ns.Write(message, 0, message.Length)
            End While
            tc.Close()
        Catch ex As Exception
            Test = ex.Message
            MessageBox.Show(Form1.TextBox1.Text.ToString())
            MessageBox.Show(Form1.ComboBox15.Text.ToString())
            MessageBox.Show(Test.ToString())
        End Try
    End Sub
Code
1
2
            MessageBox.Show(Form1.TextBox1.Text.ToString())
            MessageBox.Show(Form1.ComboBox15.Text.ToString())
выдают все что нужно, данные те что нужно.

а вот:

Code
1
            MessageBox.Show(Test.ToString())
выдает:

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

Code
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
radist04ka@ telnet 127.0.0.1 8113
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
radist04ka@ telnet 127.0.0.1 7528
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
radist04ka@ telnet 10.10.241.124 7528
Trying 10.10.241.124...
Connected to net241-124.hostel6.tsure.ru.
Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
radist04ka@ telnet 10.10.241.124 6728
Trying 10.10.241.124...
Connected to net241-124.hostel6.tsure.ru.
Escape character is '^]'.
TEST
OK
Connection closed by foreign host.
radist04ka@
я пишу TEST, возвращает OK. закрывает соединение тоже сервер.

почему тогда модуль выдает ошибку...

p.s. если вписать левые ip/порт то висит с минуты - потолторы, а потом выдает что нет соединения.
если вписать правильные ip port то выдает выше написаное про разрыв соединения.

Добавлено через 31 минуту
странно, пытаюсь из под винды, не получается:
Code
1
2
3
4
5
6
7
Microsoft Telnet> open 192.168.50.241 9666
Подключение к 192.168.50.241...
TE
 
Подключение к узлу утеряно. 'CTRL+]'
 
Microsoft Telnet>
не получается ввести слово test целиком, даже если из буфера вставлять...

Добавлено через 7 часов 15 минут
смотрел по логам:

код нормально отсылает запрос, но почему то не принимает ответ:

по логам:
Code
1
2
3
4
5
6
7
8
9
10
11
12
Feb 16 09:10:09 radist04ka : Accept connection from 192.168.50.188:10487
Feb 16 09:10:09 radist04ka : got: "TEST"
Feb 16 09:10:09 radist04ka : answer: "OK"
Feb 16 09:17:04 radist04ka : Accept connection from 192.168.50.188:10529
Feb 16 09:17:04 radist04ka : got: "TEST"
Feb 16 09:17:04 radist04ka : answer: "OK"
Feb 16 09:18:33 radist04ka : Accept connection from 192.168.50.188:10537
Feb 16 09:18:33 radist04ka : got: "GETTEST"
Feb 16 09:18:33 radist04ka : answer: ":99.9:99.9:99.9:999:999:88.88: "
Feb 16 09:21:56 radist04ka : Accept connection from 192.168.50.188:10542
Feb 16 09:21:56 radist04ka : got: "GETTEST"
Feb 16 09:21:56 radist04ka : answer: ":99.9:99.9:99.9:999:999:88.88: "
видно что запрос принят и отпрвлен ответ.

но почему почему тогда винда его не видит?

код случайно не ждет ответ на том же порту на каком посылал запрос?

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

P.P.S. вчитался в код... и понял ошибку...

я то тока отправляю данные а принимать не принимаю...

сделал:
VB.NET
1
2
3
4
5
6
                Dim body As String = "TEST"
                Dim message() As Byte = System.Text.Encoding.UTF8.GetBytes(body)
                ns.Write(message, 0, message.Length)
                Dim buffer() As Byte = New Byte(80) {}
                ns.Read(buffer, 0, buffer.Length)
                Test = (System.Text.Encoding.UTF8.GetString(buffer))
но не работает, выдает пустое значение...

в чем ошибся?
запрос идет, в логах пишет, а тут нуль.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.02.2011, 12:22
QweЯty, посмотри вот эту тему. Там может найдешь ответы на некоторые вопросы.
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
16.02.2011, 12:32
Думаю там все ответы найдешь, синхронные сокеты это вещь!
0
2 / 2 / 2
Регистрация: 11.10.2010
Сообщений: 186
16.02.2011, 12:54
вся беда в том что там явно указываются входящие порты....
а они то меняются...
вырезка:
VB.NET
1
2
3
4
5
6
7
8
'Прослушивание входящих сообщений
    Private Sub Listener()
        Try
            'Тcp- слушатель, по ip-адресу 127.0.0.1 порт=4444
            Dim ip As IPAddress = IPAddress.Parse("127.0.0.1")
            Dim listener As TcpListener = New TcpListener(ip, 4443)
            'Начинаем прослушивание
            listener.Start()
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
16.02.2011, 12:59
Ну так можно, например, ввести значение порта в какое-нибудь текстовое поле, а затем значение этого поля вставить в конструктор TcpListener. Или это не катит?
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
16.02.2011, 19:55
Цитата Сообщение от Eugene22 Посмотреть сообщение
Ну так можно, например, ввести значение порта в какое-нибудь текстовое поле, а затем значение этого поля вставить в конструктор TcpListener. Или это не катит?
Легко!
0
2 / 2 / 2
Регистрация: 11.10.2010
Сообщений: 186
17.02.2011, 05:10
эм...
это как если ВХОДЯЩИЙ порт задается сервером...

я же имел в виду:

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

посылаем запрос и ждем ответа. сервер смотрит что за запрос и посылает нужный ответ. так я ответ не могу поймать программой, т.к.сервер отвечает по другому порту...
через телнет получается же...
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
17.02.2011, 16:45
Цитата Сообщение от QweЯty Посмотреть сообщение
эм...
это как если ВХОДЯЩИЙ порт задается сервером...

я же имел в виду:

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

посылаем запрос и ждем ответа. сервер смотрит что за запрос и посылает нужный ответ. так я ответ не могу поймать программой, т.к.сервер отвечает по другому порту...
через телнет получается же...
Я вообще не понял про что это... Сервер только получает инфу, а клиент посылает запрос к серверу. И в чем проблема тоже не понимаю, задай везде один порт, что мешает, тоже не понимаю.
0
Otherside
1353 / 266 / 17
Регистрация: 16.05.2010
Сообщений: 787
18.02.2011, 11:32
у меня сервер взят не отсюда... отсюда я тока клиента выдрал...

сервер получает запрос и отвечает на запрос несколькими ответами(в зависимости от того какой запрос придет)

так вот запрос отправляется, сервер отвечает, но я не могу поймать ответ, так как сервер отвечает по совсем другому порту...
0
 Аватар для _Лёша_
388 / 377 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
18.02.2011, 11:37
Цитата Сообщение от Xo4y_KaK_PaHbwE Посмотреть сообщение
у меня сервер взят не отсюда... отсюда я тока клиента выдрал...

сервер получает запрос и отвечает на запрос несколькими ответами(в зависимости от того какой запрос придет)

так вот запрос отправляется, сервер отвечает, но я не могу поймать ответ, так как сервер отвечает по совсем другому порту...
Сервер выдери отсюда тогда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2011, 11:37
Помогаю со студенческими работами здесь

TcpListener/TcpClient BinaryReader/BinaryWriter проблема с файлами
Доброго времени суток. Появилась проблема, а конкретнее: Если я передаю файл от сервера до клиента (около 50кб)...

TcpListener и TcpClient: написать события на получение данных от сервера
Доброго времени суток, господа программисты. Пишу чат с помощью TcpListener и TcpClient. Как мне написать события на получение данных от...

Может ли приложение использующее TcpListener и TcpClient работать через интернет?
Подскажите пожалуйста собираюсь написать клиент и сервер с помощью TcpListener и TcpClient. Могут ли данные приложения вести передачу...

Как с tcpclient и tcplistener создать чат через локальную сеть
Как с tcpclient и tcplistener создать чат через локальную сеть?

TcpListener, TcpClient не "видят" друг друга через Интернет
Запускаю сервер, подключение к нему на локальной машине успешно, по локальной сети тоже успешно, а вот проблема соединение через Инет....


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru