У меня простая проблема с .NET 4 Sockets (TcpClient) в win7 и xp.
Я получаю ошибку:
Невозможно установить соединение, потому что целевой компьютер активно отказался от него
Похоже, это не проблема брандмауэра, поскольку программы клиента и сервера находятся на одном компьютере, и у меня не включен локальный брандмауэр.
Я написал и сервер, и клиент (они разговаривают на порте 80 (я также пробовал другие порты, такие как 31000). Больше ничего не работает на порте 80 на моей машине.
Код клиента:
public void makeConnection()
{
string server = ClientStatus.myself.ServerName;
port = 80;
ClientStatus.myself.BytesSent = 0.ToString();
client = new TcpClient(server, port);
ClientStatus.myself.Connected = "connected";
stream = client.GetStream();
bytes = new Byte[1024];
}
и я подтвердил, что сервер и порт - это то, что я ожидаю. Ошибка возникает на новом TcpClient (сервер, порт), и она вращается в течение примерно 4 секунд, прежде чем происходит ошибка. Я также попытался использовать IP-адрес (127.0.0.1) вместо «myhostname.domain.com» в качестве сервера (альтернативный способ создания клиентского сокета), и он также не работает.
Вот код для сервера, который я написал:
namespace SocketListener
{
Класс DataListener
{
публичный статический DataListener сам;
TcpListener server = null;
Байт [] байт;
Порт Int32;
IPAddress localAddr;
MainWindow w;
public DataListener(MainWindow caller)
{
DataListener.myself = this;
w = caller;
Status.myself.Connected = "starting";
port = 80;
localAddr = IPAddress.Parse("127.0.0.1");
server = new TcpListener(localAddr, port);
bytes = new Byte[1024];
server.Start();
}
public void acceptLoop()
{
TcpClient client;
while (true)
{
// Perform a blocking call to accept requests.
Status.myself.Connected = "waiting";
if (server.Pending())
{
client = server.AcceptTcpClient();
Status.myself.Connected = "true";
Status.myself.BytesReceived = 0.ToString();
NetworkStream stream = client.GetStream();
dataLoop(stream);
client.Close();
}
else
{
Thread.Sleep(100);
return;
}
// Shutdown and end connection
Status.myself.Connected = "false";
}
}
public void dataLoop(NetworkStream stream)
{
int count = 0;
int i;
Status.myself.ByteRate = "0.0";
Stopwatch watch = new Stopwatch();
watch.Start();
while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
{
count += i;
Status.myself.BytesReceived = count.ToString();
}
watch.Stop();
double rate = count / (watch.ElapsedMilliseconds / 1000);
rate = rate / (1024 * 1024);
Status.myself.ByteRate = rate.ToString();
}
public void shutdown()
{
server.Stop();
}
}
} * * тысяча двадцать-один