MSDN TCPListener писал(а):Ожидает подключения от TCP-клиентов сети.
Список всех членов этого типа представлен в разделе TcpListener - члены.
System.Object
System.Net.Sockets.TcpListener
[Visual Basic]
Public Class TcpListener
[C#]
public class TcpListener
[C++]
public __gc class TcpListener
[JScript]
public class TcpListener
Потокобезопасность
Любые члены этого типа с модификаторами public static (Shared в Visual Basic) могут безопасно работать в многопоточных операциях. Потокобезопасность членов экземпляров не гарантируется.
Примечания
Класс TcpListener обеспечивает простые методы, предназначенные для ожидания и приема в блокирующем синхронном режиме входящих запросов на подключения. Можно использовать объект TcpClient или Socket, чтобы подключиться к объекту TcpListener. Создайте объект TcpListener, используя IPEndPoint, локальный IP-адрес и номер порта, или просто номер порта. Задайте значение Any для локального IP-адреса и значение 0 для номера локального порта, если необходимо, чтобы эти значения были присвоены основным поставщиком услуг. Если выбран этот вариант, можно воспользоваться свойством LocalEndpoint, чтобы определить присвоенные параметры.
Используйте метод Start, чтобы начать прослушивание входящих запросов на подключение. Метод Start будет ставить в очередь входящие подключения до тех пор, пока не будет вызван метод Stop или в очередь не будет поставлено количество запросов, заданное параметром MaxConnections. Используйте для приема подключения из входной очереди подключений метод AcceptSocket или AcceptTcpClient. Эти два метода будут выполнять блокирование. Если необходимо избежать блокирования, воспользуйтесь сначала методом Pending для того, чтобы определить, имеются ли в очереди доступные запросы на подключение.
Вызовите метод Stop, чтобы закрыть TcpListener.
Примечание. Метод Stop не закрывает какие-либо из уже принятых подключений. Пользователь сам несет ответственность за закрытие каждого из этих подключений.
Пример
[Visual Basic, C#, C++] В следующем примере продемонстрировано создание объекта TcpListener.
[Visual Basic]
Public Shared Sub Main()
Try
' Set the TcpListener on port 13000.
Dim port As Int32 = 13000
Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1")
Dim server As New TcpListener(localAddr, port)
' Start listening for client requests.
server.Start()
' Buffer for reading data
Dim bytes(1024) As [Byte]
Dim data As [String] = Nothing
' 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.
Dim client As TcpClient = server.AcceptTcpClient()
Console.WriteLine("Connected!")
data = Nothing
' Get a stream object for reading and writing
Dim stream As NetworkStream = client.GetStream()
Dim i As Int32
' Loop to receive all the data sent by the client.
i = stream.Read(bytes, 0, bytes.Length)
While (i <> 0)
' Translate data bytes to a ASCII string.
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
Console.WriteLine([String].Format("Received: {0}", data))
' Process the data sent by the client.
data = data.ToUpper()
Dim msg As [Byte]() = System.Text.Encoding.ASCII.GetBytes(data)
' Send back a response.
stream.Write(msg, 0, msg.Length)
Console.WriteLine([String].Format("Sent: {0}", data))
i = stream.Read(bytes, 0, bytes.Length)
End While
' Shutdown and end connection
client.Close()
End While
Catch e As SocketException
Console.WriteLine("SocketException: {0}", e)
End Try
Console.WriteLine(ControlChars.Cr + "Hit enter to continue...")
Console.Read()
End Sub 'Main
[C#]
public static void Main()
{
try
{
// Set the TcpListener on port 13000.
Int32 port = 13000;
IPAddress localAddr = IPAddress.Parse("127.0.0.1");
// TcpListener server = new TcpListener(port);
TcpListener 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();
Int32 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(String.Format("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(String.Format("Sent: {0}", data));
}
// Shutdown and end connection
client.Close();
}
}
catch(SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("\nHit enter to continue...");
Console.Read();
}
[C++]
void main() {
try {
// Set the TcpListener on port 13000.
Int32 port = 13000;
IPAddress* localAddr = IPAddress::Parse(S"127.0.0.1");
// TcpListener* server = new TcpListener(port);
TcpListener* server = new TcpListener(localAddr, port);
// Start listening for client requests.
server->Start();
// Buffer for reading data
Byte bytes[] = new Byte[256];
String* data = 0;
// Enter the listening loop.
while (true) {
Console::Write(S"Waiting for a connection... ");
// Perform a blocking call to accept requests.
// You could also user server.AcceptSocket() here.
TcpClient* client = server->AcceptTcpClient();
Console::WriteLine(S"Connected!");
data = 0;
// Get a stream Object* for reading and writing
NetworkStream* stream = client->GetStream();
Int32 i;
// Loop to receive all the data sent by the client.
while (i = stream->Read(bytes, 0, bytes->Length)) {
// Translate data bytes to a ASCII String*.
data = Text::Encoding::ASCII->GetString(bytes, 0, i);
Console::WriteLine(String::Format(S"Received: {0}", data));
// Process the data sent by the client.
data = data->ToUpper();
Byte msg[] = Text::Encoding::ASCII->GetBytes(data);
// Send back a response.
stream->Write(msg, 0, msg->Length);
Console::WriteLine(String::Format(S"Sent: {0}", data));
}
// Shutdown and end connection
client->Close();
}
} catch (SocketException* e) {
Console::WriteLine(S"SocketException: {0}", e);
}
Console::WriteLine(S"\nHit enter to continue...");
Console::Read();
}
[JScript] Для JScript примеры отсутствуют. Для просмотра примера Visual Basic, C# или C++ нажмите кнопку «Язык» в левом верхнем углу страницы.
Требования
MSDN TCPClient писал(а):Обеспечивает клиентские подключения для сетевых служб протокола TCP.
Список всех членов этого типа представлен в разделе TcpClient - члены.
System.Object
System.Net.Sockets.TcpClient
[Visual Basic]
Public Class TcpClient
Implements IDisposable
[C#]
public class TcpClient : IDisposable
[C++]
public __gc class TcpClient : public IDisposable
[JScript]
public class TcpClient implements IDisposable
Потокобезопасность
Любые члены этого типа с модификаторами public static (Shared в Visual Basic) могут безопасно работать в многопоточных операциях. Потокобезопасность членов экземпляров не гарантируется.
Примечания
Класс TcpClient обеспечивает простые методы для подключения, а также приема и передачи потоков данных в сети в синхронном блокирующем режиме.
Для того, чтобы объект TcpClient мог выполнить подключение и организовать обмен данными, объект TcpListener или Socket, созданный с помощью TCP-объекта ProtocolType, должен выполнять прослушивание входящих запросов на подключение. Подключиться к данному слушателю можно одним из следующих двух способов:
Создать объект TcpClient и вызвать один из трех доступных методов Connect.
Создайте объект TcpClient, используя имя хоста и номер порта удаленного узла. Этот конструктор будет автоматически предпринимать попытки установления соединения.
Примечание. Если необходимо передать датаграммы без установления соединения в синхронном блокирующем режиме, воспользуйтесь классом UdpClient.
Примечания для наследующих объектов: Чтобы передать или принять данные, используйте метод GetStream для получения объекта NetworkStream. Вызовите методы Write и Read объекта NetworkStream, чтобы передать или принять данные с удаленного хоста. Воспользуйтесь методом Close, чтобы свободить все связанные с объектом TcpClient ресурсы.
Пример
[Visual Basic, C#, C++] В следующем примере продемонстрировано установление соединения объектом TcpClient.
[Visual Basic]
Shared Sub Connect(server As [String], message As [String])
Try
' Create a TcpClient.
' Note, for this client to work you need to have a TcpServer
' connected to the same address as specified by the server, port
' combination.
Dim port As Int32 = 13000
Dim client As New TcpClient(server, port)
' Translate the passed message into ASCII and store it as a Byte array.
Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
' Get a client stream for reading and writing.
' Stream stream = client.GetStream();
Dim stream As NetworkStream = client.GetStream()
' Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length)
Console.WriteLine("Sent: {0}", message)
' Receive the TcpServer.response.
' Buffer to store the response bytes.
data = New [Byte](256) {}
' String to store the response ASCII representation.
Dim responseData As [String] = [String].Empty
' Read the first batch of the TcpServer response bytes.
Dim bytes As Int32 = stream.Read(data, 0, data.Length)
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
Console.WriteLine("Received: {0}", responseData)
' Close everything.
client.Close()
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException: {0}", e)
Catch e As SocketException
Console.WriteLine("SocketException: {0}", e)
End Try
Console.WriteLine(ControlChars.Cr + " Press Enter to continue...")
Console.Read()
End Sub 'Connect
[C#]
static void Connect(String server, String message)
{
try
{
// Create a TcpClient.
// Note, for this client to work you need to have a TcpServer
// connected to the same address as specified by the server, port
// combination.
Int32 port = 13000;
TcpClient client = new TcpClient(server, port);
// Translate the passed message into ASCII and store it as a Byte array.
Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
// Get a client stream for reading and writing.
// Stream stream = client.GetStream();
NetworkStream stream = client.GetStream();
// Send the message to the connected TcpServer.
stream.Write(data, 0, data.Length);
Console.WriteLine("Sent: {0}", message);
// Receive the TcpServer.response.
// Buffer to store the response bytes.
data = new Byte[256];
// String to store the response ASCII representation.
String responseData = String.Empty;
// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream.Read(data, 0, data.Length);
responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
Console.WriteLine("Received: {0}", responseData);
// Close everything.
client.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("\n Press Enter to continue...");
Console.Read();
}
[C++]
void Connect(String* server, String* message) {
try {
// Create a TcpClient.
// Note, for this client to work you need to have a TcpServer
// connected to the same address as specified by the server, port
// combination.
Int32 port = 13000;
TcpClient* client = new TcpClient(server, port);
// Translate the passed message into ASCII and store it as a Byte array.
Byte data[] = Text::Encoding::ASCII->GetBytes(message);
// Get a client stream for reading and writing.
// Stream stream = client->GetStream();
NetworkStream* stream = client->GetStream();
// Send the message to the connected TcpServer.
stream->Write(data, 0, data->Length);
Console::WriteLine(S"Sent: {0}", message);
// Receive the TcpServer::response.
// Buffer to store the response bytes. data = new Byte[256];
// String to store the response ASCII representation.
String* responseData = String::Empty;
// Read the first batch of the TcpServer response bytes.
Int32 bytes = stream->Read(data, 0, data->Length);
responseData = Text::Encoding::ASCII->GetString(data, 0, bytes);
Console::WriteLine(S"Received: {0}", responseData);
// Close everything.
client->Close();
} catch (ArgumentNullException* e) {
Console::WriteLine(S"ArgumentNullException: {0}", e);
} catch (SocketException* e) {
Console::WriteLine(S"SocketException: {0}", e);
}
Console::WriteLine(S"\n Press Enter to continue...");
Console::Read();
}
[JScript] Для JScript примеры отсутствуют. Для просмотра примера Visual Basic, C# или C++ нажмите кнопку «Язык» в левом верхнем углу страницы.
Требования
Пространство имен: System.Net.Sockets
Платформы: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Семейство Windows Server 2003, .NET Compact Framework - Windows CE .NET
Сборка: System (в System.dll)
Безопасность .NET Framework:
SocketPermission, чтобы установить исходящее соединение или принять входящий запрос.
MSDN Thread писал(а):Создает и контролирует поток, задает его приоритет и возвращает его статус.
Список всех членов этого типа представлен в разделе Thread - члены.
System.Object
System.Threading.Thread
[Visual Basic]
NotInheritable Public Class Thread
[C#]
public sealed class Thread
[C++]
public __gc __sealed class Thread
[JScript]
public class Thread
Потокобезопасность
Этот тип можно безопасно использовать в многопоточных операциях.
Примечания
Процесс может создавать один или более потоков для выполнения частей программного кода, связанного с процессом. Следует использовать делегат ThreadStart для задания программного кода, выполняемого потоком.
В течение своего существования поток всегда находится в одном или более состояниях, определенных в классе ThreadState. Для потока можно запрашивать планирование уровня приоритета, который определяется классом ThreadPriority, но не гарантируется, что операционная система предоставит его.
Метод GetHashCode предоставляет идентификацию управляемых потоков. В течение жизни поток не будет конфликтовать со значениями, полученными от других потоков, независимо от домена приложения, из которой получается значение.
Примечание. Идентификационный номер потока (ThreadId) операционной системы не имеет жесткой взаимосвязи с управляемым потоком, так как неуправляемый хост может контролировать взаимосвязь между управляемыми и неуправляемыми потоками. В частности, сложный хост может использовать API общеязыковой среды выполнения для планирования нескольких управляемых потоков на один поток операционной системы или перемещения управляемых потоков между различными потоками операционной системы.
Пример
[Visual Basic, C#, C++] В следующем примере кода показаны простейшие функциональные возможности работы с потоками.
[Visual Basic]
Imports System
Imports System.Threading
' Simple threading scenario: Start a Shared method running
' on a second thread.
Public Class ThreadExample
' The ThreadProc method is called when the thread starts.
' It loops ten times, writing to the console and yielding
' the rest of its time slice each time, and then ends.
Public Shared Sub ThreadProc()
Dim i As Integer
For i = 0 To 9
Console.WriteLine("ThreadProc: {0}", i)
' Yield the rest of the time slice.
Thread.Sleep(0)
Next
End Sub
Public Shared Sub Main()
Console.WriteLine("Main thread: Start a second thread.")
' The constructor for the Thread class requires a ThreadStart
' delegate. The Visual Basic AddressOf operator creates this
' delegate for you.
Dim t As New Thread(AddressOf ThreadProc)
' Start ThreadProc. On a uniprocessor, the thread does not get
' any processor time until the main thread yields. Uncomment
' the Thread.Sleep that follows t.Start() to see the difference.
t.Start()
'Thread.Sleep(0)
Dim i As Integer
For i = 1 To 4
Console.WriteLine("Main thread: Do some work.")
Thread.Sleep(0)
Next
Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.")
t.Join()
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.")
Console.ReadLine()
End Sub
End Class
[C#]
using System;
using System.Threading;
// Simple threading scenario: Start a static method running
// on a second thread.
public class ThreadExample {
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
public static void ThreadProc() {
for (int i = 0; i < 10; i++) {
Console.WriteLine("ThreadProc: {0}", i);
// Yield the rest of the time slice.
Thread.Sleep(0);
}
}
public static void Main() {
Console.WriteLine("Main thread: Start a second thread.");
// The constructor for the Thread class requires a ThreadStart
// delegate that represents the method to be executed on the
// thread. C# simplifies the creation of this delegate.
Thread t = new Thread(new ThreadStart(ThreadProc));
// Start ThreadProc. On a uniprocessor, the thread does not get
// any processor time until the main thread yields. Uncomment
// the Thread.Sleep that follows t.Start() to see the difference.
t.Start();
//Thread.Sleep(0);
for (int i = 0; i < 4; i++) {
Console.WriteLine("Main thread: Do some work.");
Thread.Sleep(0);
}
Console.WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
t.Join();
Console.WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console.ReadLine();
}
}
[C++]
// [C++]
// Compile using /clr option.
#using <mscorlib.dll>
using namespace System;
using namespace System::Threading;
// Simple threading scenario: Start a Shared method running
// on a second thread.
public __gc class ThreadExample
{
public:
// The ThreadProc method is called when the thread starts.
// It loops ten times, writing to the console and yielding
// the rest of its time slice each time, and then ends.
static void ThreadProc()
{
for (int i = 0; i < 10; i++)
{
Console::Write("ThreadProc: ");
Console::WriteLine(i);
// Yield the rest of the time slice.
Thread::Sleep(0);
}
}
};
int main()
{
Console::WriteLine(S"Main thread: Start a second thread.");
// Create the thread, passing a ThreadStart delegate that
// represents the ThreadExample::ThreadProc method. For a
// delegate representing a static method, no object is
// required.
Thread *oThread = new Thread(new ThreadStart(0, &ThreadExample::ThreadProc));
// Start the thread. On a uniprocessor, the thread does not get
// any processor time until the main thread yields. Uncomment
// the Thread.Sleep that follows t.Start() to see the difference.
oThread->Start();
//Thread::Sleep(0);
for (int i = 0; i < 4; i++) {
Console::WriteLine("Main thread: Do some work.");
Thread::Sleep(0);
}
Console::WriteLine("Main thread: Call Join(), to wait until ThreadProc ends.");
oThread->Join();
Console::WriteLine("Main thread: ThreadProc.Join has returned. Press Enter to end program.");
Console::ReadLine();
return 0;
}
[Visual Basic, C#, C++] Этот код формирует выходные данные, подобные приведенным ниже:
[VB, C++, C#]
Main thread: Start a second thread.
Main thread: Do some work.
ThreadProc: 0
Main thread: Do some work.
ThreadProc: 1
Main thread: Do some work.
ThreadProc: 2
Main thread: Do some work.
ThreadProc: 3
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned. Press Enter to end program.
[JScript] Для JScript примеры отсутствуют. Для просмотра примера Visual Basic, C# или C++ нажмите кнопку «Язык» в левом верхнем углу страницы.
Требования
Пространство имен: System.Threading
Платформы: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Семейство Windows Server 2003, .NET Compact Framework - Windows CE .NET
Сборка: Mscorlib (в Mscorlib.dll)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 103