Tcplistener возвращает ошибку, когда он отключаетсяC#

Место общения программистов C#
Ответить
Anonymous
 Tcplistener возвращает ошибку, когда он отключается

Сообщение Anonymous »

Когда клиент TCP отключается, слушатель TCP выдает ошибку;
2 клиенты просто отправляют случайные сообщения каждую секунду. Когда я закрываю одного клиента, слушатель выдает ошибку, и из -за этого другой клиент дает ошибку и закрывает приложение консоли. < /P>

Код: Выделить всё

Unhandled exception. System.IO.IOException:
Unable to read data from the transport connection:
An existing connection was forcibly closed by the remote host.
---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host.
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)    --- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at ConsoleApp2.Program.handle_connection(IAsyncResult result) in C:\Users\ahmet\OneDrive\Desktop\new\ConsoleApp2\Program.cs:line 67
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)    horse System.Threading.Tasks.AwaitTaskContinuation.RunCallback(ContextCallback callback, Object state, Task& currentTask)
--- End of stack trace from previous location ---
at System.Threading.Tasks.Task.c.b__128_1(Object state)
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart()
< /code>
tcp прослушивание < /p>
using System;
using System.Threading;
using System.Collections.Concurrent;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Collections.Generic;

namespace ConsoleApp2 {
class Program {
TcpListener server = new TcpListener(IPAddress.Any, 13000);

static void Main(string[] args) {

try {
Program main = new Program();

main.server_start();

Console.ReadLine();

} catch (ArgumentNullException e) {
Console.WriteLine("ArgumentNullException: {0}", e);
} catch (SocketException e) {
Console.WriteLine("SocketException: {0}", e);
}

}

private void server_start() {
try {
server.Start();
} catch (ArgumentNullException e) {
Console.WriteLine("ArgumentNullException: {0}", e);
} catch (SocketException e) {
Console.WriteLine("SocketException: {0}", e);
}

Console.WriteLine("Sunucu Başlatıldı.  Bağlantı Bekleniyor...");
accept_connection();
}

private void accept_connection() {
try {
server.BeginAcceptTcpClient(handle_connection, server);
} catch (ArgumentNullException e) {
Console.WriteLine("ArgumentNullException: {0}", e);
} catch (SocketException e) {
Console.WriteLine("SocketException: {0}", e);
}
}

private void handle_connection(IAsyncResult result) {
try {
Console.WriteLine("Bağlandı...");
accept_connection();
TcpClient client = server.EndAcceptTcpClient(result);

NetworkStream stream = client.GetStream();
Byte[] bytes = new Byte[256];
String data = null;

int i;

while ((i = stream.Read(bytes, 0, bytes.Length)) != 0) {
data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
Console.WriteLine("{0}", data);
}
} catch (ArgumentNullException e) {
Console.WriteLine("ArgumentNullException: {0}", e);
} catch (SocketException e) {
Console.WriteLine("SocketException: {0}", e);
}

}

}

}
< /code>
tcp client < /p>
using System;
using System.Threading;
using System.Collections.Concurrent;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Collections.Generic;

namespace ConsoleApp2
{
class Program
{
static TcpClient client = new TcpClient("127.0.0.1",13000);
static List\ mesajlar = new List\();
public static readonly object locker = new object();

static void Main()
{
ThreadPool.QueueUserWorkItem(MesajlariAta);
Thread.Sleep(100);
ThreadPool.QueueUserWorkItem(MesajGonder);
Console.ReadLine();
}

static void MesajlariAta(object state)
{
lock (locker)
{
mesajlar.Add("Java");
mesajlar.Add("C");
mesajlar.Add("C++");
mesajlar.Add("C#");
mesajlar.Add("Python");
mesajlar.Add("HTML");
mesajlar.Add("CSS");
mesajlar.Add("PHP");
mesajlar.Add("MERHABA");

}
}

static void MesajGonder(object state)
{
while (true)
{
var random = new Random();
string message = mesajlar[random.Next(mesajlar.Count)];

Byte[] data = System.Text.Encoding.ASCII.GetBytes(message);
NetworkStream stream = client.GetStream();
stream.Write(data, 0, data.Length);
Console.WriteLine("Mesaj Gönderildi");
Thread.Sleep(1000);
}
}
}

}
попытался вернуть false, но он написан beginaccepttcpclient () woid void

Подробнее здесь: https://stackoverflow.com/questions/796 ... isconnects
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»