Обычно разрешается только одно использование адреса сокета протокол сетевой адрес порт njrat

TcpSocket: Обычно разрешается только одно использование адреса сокета

Понимаю, что тем с таким заголовком уже уйма, но ответа я так и не увидел. А точнее — что делать в моем случае.

Итак, делаю сервер, который слушает локалку по указанному порту. За основу взял эту библиотеку — https://github.com/nterry/AwesomeSockets. Вот так выглядит метод запуска прослушивания:

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 34
public async void StartListening(int port) { if (CancellationTokenSource == null) CancellationTokenSource = new CancellationTokenSource(); _cancellationToken = CancellationTokenSource.Token; Clients = new ObservableCollectionClient>(); BindingOperations.EnableCollectionSynchronization(Clients, _lockObject); try { while (_tcpListen == null) { ShowCallbackMessageAction?.Invoke("Try to start server"); _tcpListen = AweSock.TcpListen(port); if (_tcpListen != null) { ShowCallbackMessageAction?.Invoke("Server started"); var waitForConnectionTask = Task.Run(() => WaitForConnectionLoop(), _cancellationToken); var checkClientsConnectionTask = Task.Run(() => CheckClientsConnectionLoop(), _cancellationToken); await Task.WhenAll(waitForConnectionTask, checkClientsConnectionTask); } // https://stackoverflow.com/a/32768637/4944499 await Task.Delay(1000, _cancellationToken).ContinueWith(task => { }); } } catch (Exception exception) { ShowCallbackMessageAction?.Invoke($"Error on start server: "); } }
public void StopListening() { ShowCallbackMessageAction?.Invoke("Begin stop server. "); ShowCallbackMessageAction?.Invoke("Disconnect all clients"); DisconnectAllClients(); CancellationTokenSource?.Cancel(); _tcpListen?.Close(); _tcpListen = null; ShowCallbackMessageAction?.Invoke("Server stopped"); }
public static ISocket TcpListen(int port, int backlog = 10) { var listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //var ip = new IPAddress(new byte[] < 0, 0, 0, 0 >); //var localEndPoint = new IPEndPoint(ip, port); IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, port); listenSocket.Bind(localEndPoint); listenSocket.Listen(backlog); return AwesomeSocket.New(listenSocket); }

Так вот — это все работает до того момента, пока я приложение свое не закрою без отписки от прослушивания. Т.е., например, случился крэш. После того, как я повторно запускаю сервер, то вижу сообщение:

Везде пишут, что это нормально и порт сам освободится через некоторое время (вроде 240 секунд), но в моем случае этого не происходит. Помогает только перезагрузка компа. Как быть?

Источник

Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)

Error: Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)
Можно ли как-то обойти эту ошибку, и отправить пакет на "занятый" адрес/порт

Обычно разрешается одно использование адреса сокета (протокол/сетевой адрес/порт)
Написал клиент-сервер для передачи файлов(первый опыт). При подключении клиента к серверу дает.

Сокеты. Ошибка «Обычно разрешается одно использование адреса сокета»
Имеется отправка строк string AcceptLogin = Логин.Text + Пароль.Text; //AcceptLogin =.

В сервере ошибка Обычно разрешается одно использование адреса сокета
В сервере моего приложения при отправке файла возникает ошибка "Обычно разрешается одно.

Эксперт .NET

ЦитатаСообщение от kolorotur Посмотреть сообщение

Эксперт .NET

ЦитатаСообщение от Tweekaz Посмотреть сообщение

ЦитатаСообщение от kolorotur Посмотреть сообщение

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 34 35 36 37 38 39 40 41 42 43 44 45 46
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using System.Net; using System.Net.Sockets; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); start_work(); } public void qwe(string text) { textBox1.Text = "bla bla bla\r\n"; } public static void start_work() { Thread main_server_thread = new Thread(delegate() { IPAddress ip = IPAddress.Parse("192.168.1.101"); IPEndPoint point = new IPEndPoint(ip, 5271); Socket main = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); main.Bind(point); main.Listen(10); while (true) { Form1 r = new Form1(); r.qwe("123456"); } }); main_server_thread.Start(); } } }

Источник

WCF: System.Net.SocketException — Only one usage of each socket address (protocol/network address/port) is normally permitted

I have a WCF service and a Web application. Web application makes calls to this WCF service in a continous manner a.k.a polling. In our production environment, I receive this error very rarely. Since, this is an internal activity users were not aware of when this error is thrown.

Could not connect to http://localhost/QAService/Service.svc. TCP error code 10048: Only one usage of each socket address (protocol/network address/port) is normally permitted 127.0.0.1:80. —> System.Net.WebException: Unable to connect to the remote server —> System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted 127.0.0.1:80

I am having trouble in reproducing this behaviour in our dev/qa environment. I have made sure that the client connection is closed in a try..catch..finally block. Still don’t understand what is causing this issue .. any one aware of this? Note: I’ve looked at this SO question, but not seems to be answering my problem, so it is not repeated questions.

Is that because the web service is using port 80, which is in use by IIS? Which port does your service use in production? Which port, is IIS configured on in production?

It is same 80 for both applications. WCF service is configured as a virtual directory inside the root in which the site is hosted. So, you’re saying there could be occasionally a conflict between both web page request and a request to service from web page trying to use same port?

I have encountered a similar situation. Planning to use net tcp port sharing feature in wcf service. msdn.microsoft.com/en-us/library/ms734772.aspx Please let me know if this works

2 Answers 2

You are overloading the TCP/IP stack. Windows (and I think all socket stacks actually) have a limitation on the number of sockets that can be opened in rapid sequence due to how sockets get closed under normal operation. Whenever a socket is closed, it enters the TIME_WAIT state for a certain time (240 seconds IIRC). Each time you poll, a socket is consumed out of the default dynamic range (I think its about 5000 dynamic ports just above 1024), and each time that poll ends, that particular socket goes into TIME_WAIT. If you poll frequently enough, you will eventually consume all of the available ports, which will result in TCP error 10048.

Generally, WCF tries to avoid this problem by pooling connections and things like that. This is usually the case with internal services that are not going over the internet. I am not sure if any of the wsHttp bindings support connection pooling, but the netTcp binding should. I would assume named pipes does not run into this problem. I couldn’t say for the MSMQ binding.

There are two solutions you can use to get around this problem. You can either increase the dynamic port range, or reduce the period of TIME_WAIT. The former is probably the safer route, but if you are consuming an extremely high volume of sockets (which doesn’t sound like the case for your scenario), reducing TIME_WAIT is a better option (or both together.)

Changing the Dynamic Port Range

  1. Open regedit.
  2. Open key HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
  3. Edit (or create as DWORD) the MaxUserPort value.
  4. Set it to a higher number. (i.e. 65534)

Changing the TIME_WAIT delay

  1. Open regedit.
  2. Open key HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
  3. Edit (or create as DWORD) the TcpTimedWaitDelay.
  4. Set it to a lower number. Value is in seconds. (i.e. 60 for 1 minute delay)

One of the above solutions should fix your problem. If it persists after changing the port range, I would see try increasing the period of your polling so it happens less frequently. that will give you more leeway to work around the time wait delay. I would change the time wait delay as a last resort.

Источник

Как избавиться от ошибки использования одного адреса сокета (протокол/сетевой адрес/порт)?

Помогите избавиться от этой ошибки. Может она возникать из-за большого количества подключений в создаваемых потоках? В данном случае она возникает если я локально запускаю серверную часть.. В облачном сервере такого нет, все работает.. Есть клиентская часть которая отправляет каждые 2 секунды в тред серверной запрос, чекая подключен сервер или нет. Плюсом периодически отправляются запросы для основного функционала (минимальное количество. по сравнению с проверкой состояния подключения).. Такое ощущение что пропуская способность порта как-то запоролась, понятия не имею как поправить.. Может быть такое? Хэлп! Или я вообще неправильно многопоточность использую?

Ошибка стала возникать моментально при запуске серверной части, даже без запуска клиентской..

import datetime import os import re import socketserver from peewee import * import host import json class ThreadingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): pass class EchoTCPHandler(socketserver.BaseRequestHandler): def handle(self): data = json.loads(self.request.recv(1024).decode()) . self.request.sendall(send_data.encode()) if __name__ == '__main__': with ThreadingTCPServer((host.hostl, 8888), EchoTCPHandler) as server: server.serve_forever()
Traceback (most recent call last): File "C:\Users\ASUS\PycharmProjects\server.py", line 178, in with ThreadingTCPServer((host.hostl, 8888), EchoTCPHandler) as server: File "C:\Python39\lib\socketserver.py", line 452, in __init__ self.server_bind() File "C:\Python39\lib\socketserver.py", line 466, in server_bind self.socket.bind(self.server_address) OSError: [WinError 10048] Обычно разрешается только одно использование адреса сокета (протокол/сетевой адрес/порт)

Источник

Читайте также:  Протоколы компьютерных сетей это различные марки компьютеров
Оцените статью
Adblock
detector