Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: VB.NET TCP Client - Server Socket Communications Добавлено: 11.03.10 19:20  

Автор вопроса:  Puzer
Вообщем суть такова:
1)Мне нужно клиент\сервер который может котороый может кидать string от клиента к серверу и наоборот.
(ip и порт сервера известны(интернет), сервер нужен НЕ многопоточный, но клиент может отключаться и подключаться)

2)Откопал код для такого, вот только помогите мне переделать под форму:
на сервере просто richtextbox`ы c принятыми сообщениями и с отправлиными.

Вот нашёл такой код:

'клиент
Imports System.Net.Sockets
Imports System.Text
Class TCPCli
    Shared Sub Main()

        Dim tcpClient As New System.Net.Sockets.TcpClient()
        tcpClient.Connect("127.0.0.1", 8000)
        Dim networkStream As NetworkStream = tcpClient.GetStream()
        If networkStream.CanWrite And networkStream.CanRead Then
            ' Do a simple write.
            Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
            networkStream.Write(sendBytes, 0, sendBytes.Length)
            ' Read the NetworkStream into a byte buffer.
            Dim bytes(tcpClient.ReceiveBufferSize) As Byte
            networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
            ' Output the data received from the host to the console.
            Dim returndata As String = Encoding.ASCII.GetString(bytes)
            Console.WriteLine(("Host returned: " + returndata))
        Else
            If Not networkStream.CanRead Then
                Console.WriteLine("cannot not write data to this stream")
                tcpClient.Close()
            Else
                If Not networkStream.CanWrite Then
                    Console.WriteLine("cannot read data from this stream")
                    tcpClient.Close()
                End If
            End If
        End If
        ' pause so user can view the console output
        Console.ReadLine()
    End Sub
End Class



'сервер
Imports System.Net.Sockets
Imports System.Text
Class TCPSrv
    Shared Sub Main()
        ' Must listen on correct port- must be same as port client wants to connect on.
        Const portNumber As Integer = 8000
        Dim tcpListener As New TcpListener(portNumber)
        tcpListener.Start()
        Console.WriteLine("Waiting for connection...")
        Try
            'Accept the pending client connection and return
            'a TcpClient initialized for communication.
            Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient()
            Console.WriteLine("Connection accepted.")
            ' Get the stream
            Dim networkStream As NetworkStream = tcpClient.GetStream()
            ' Read the stream into a byte array
            Dim bytes(tcpClient.ReceiveBufferSize) As Byte
            networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))
            ' Return the data received from the client to the console.
            Dim clientdata As String = Encoding.ASCII.GetString(bytes)
            Console.WriteLine(("Client sent: " + clientdata))
            Dim responseString As String = "Connected to server."
            Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString)
            networkStream.Write(sendBytes, 0, sendBytes.Length)
            Console.WriteLine(("Message Sent /> : " + responseString))
            'Any communication with the remote client using the TcpClient can go here.
            'Close TcpListener and TcpClient.
            tcpClient.Close()
            tcpListener.Stop()
            Console.WriteLine("exit")
            Console.ReadLine()
        Catch e As Exception
            Console.WriteLine(e.ToString())
            Console.ReadLine()
        End Try
    End Sub
   End Class

Ответить

  Ответы Всего ответов: 2  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 13.03.10 02:27
Примеры выглядят корректными.
Посмотри в MSDN пример по TcpClient где показано как после отключения одного клиента обработать следующего (но учти, если сервер не многопоточный, то второй клиент не сможет подключиться пока обрабатывается первый клиент)
По поводу вставки в RichTextBox и т.п. - задача довольно тривиальна, ты наверное хочешь чтоб за тебя весь код написали?

Ответить

Номер ответа: 2
Автор ответа:
 Coloss



ICQ: 479007356 

Вопросов: 15
Ответов: 37
 Профиль | | #2 Добавлено: 13.01.12 09:32
А возможно ли так переписать код, что бы выделить отправку и прием сообщений в отдельные потоки? на примере
 
  1. Dim ct As New Thread(New ThreadStart(AddressOf aa2))
  2.  ct.Start()
  3. Private Sub aa2()
  4.         Try
  5.             'Accept the pending client connection and return
  6.             'a TcpClient initialized for communication.
  7.             Dim tcpClient As TcpClient = tcpListener.AcceptTcpClient() 'если кто то подключается...
  8.             ListBox1.Items.Add("Connection accepted.")
  9.             ' Get the stream
  10.             While 1
  11.                 Dim networkStream As NetworkStream = tcpClient.GetStream() 'получаем поток для приема
  12.                 ' Read the stream into a byte array
  13.                 Dim readbuf(tcpClient.ReceiveBufferSize) As Byte 'инициализируем буфер
  14.                 networkStream.Read(readbuf, 0, CInt(tcpClient.ReceiveBufferSize)) 'считываем из буфера
  15.                 ' Return the data received from the client to the console.
  16.                 Dim clientdata As String = Encoding.ASCII.GetString(readbuf) 'преобразуем в текст
  17.                 ListBox1.Items.Add(("Client sent: " + clientdata)) 'выводим
  18.                 Dim responseString As String = "Connected to server." 'отправляемый текст
  19.                 Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(responseString) 'преобразуем в биты
  20.                 networkStream.Write(sendBytes, 0, sendBytes.Length) 'в потоке отправляем
  21.                 ListBox1.Items.Add(("Message Sent /> : " + responseString)) ' пишем:отправлено Иванову В. И. ))))
  22.             End While
  23.  
  24.             'Any communication with the remote client using the TcpClient can go here.
  25.             'Close TcpListener and TcpClient.
  26.             '  tcpClient.Close()
  27.             'tcpListener.Stop()
  28.             ListBox1.Items.Add("exit")
  29.         Catch e As Exception
  30.             ListBox1.Items.Add(e.ToString())
  31.         End Try

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам