C# проблемы с Тср клиентом
у меня маленькая проблемка... я написал примитивного клиента и сервера... и когда я их тестирую на одном компе через localhost или через глобальный IP все нормально..., но когда пробую подсоединить клиента с другого компа то пишет что невозможно подключится потому что небыло отклика от сервера...
s44.radikal.ru/.../0904/8d/48698c89d00c.jpg
я полазил по мсдн, нарыл там прогу, откомпилировал ее и всеравно то же самое...
потом я нарыл на разных форумах то, что это через фаервол...
хм... откючив его (и антивирус и сервис в винде) ошибка всеравно продолжала появляться...
помогите... я не могу понять что с этим делать...
26 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівЗачьот!!!
впринципе да..., но гугл не обижай...
Вот оно поколение гугла, сборщика мусора и готовых фреймворков: (
ладно... всем спасибо... извините что голову морочил... буду учить комп. сети...
на джаве я использовал статический ip...
А я вам вопрос по поводу динамического IP не зря задавал. Это не безвыходная ситуация, но лучше почитайте литературу, чтобы понимать как работают протоколы. На каком бы вы языке не писали свою программу, TCP/IP протокол от этого по другому работать не будет.
Мини-аська на любом языке также бы работала при динамическом IP. IP-протокол от языка не зависит.
У вас на сервере динамический белый IP и никак нельзя заказать его фиксированным? Тяжёлый случай.
Ну тогда можно на каком-то из открытых ресурсов при старте сервера в txt файл писать текущий белый IP через php-скрипт, а клиенты его будут читать. Но гораздо проще купить белый статический IP, в нашей сети это стоит 10 грн в месяц или 100 в год, что довольно дёшево.
когда я потключаюсь к инету мне дается 2 IP... одна статическая другая динамическая...
статическкая ато типа то что я прописывал... “192.168.1.1”...,
а тут нада использовать не этот адрес..., а тот что динамически меняется при каждом потключении...
отсюда проблема... НУ КАК КЛИЕНТ БУДЕТ ЗНАТЬ какой ір имеет сервер когда захочет подключится к нему например через день или 2...
\\ тупой с#... я писал мини аську на джаве... и там хватало только вот этого статического ір...
Вот вам tiny http сервер
home.lanck.net/...f/srv/index.htm
SuperScan
www.snapfiles.com/.../superscan.html
Если и это не поможет то тогда учится, учится и учится. Промышленное ПО Вам пока пока писать рано.
Фаерволы бывают разные, не факт что там стандартный.
А по поводу этого как быстро вырубает? Тоесть есть коннект или нет?Думаю, вам по сетям книгу нужно почитать. Например эту bookzone.com.ua/catalog.php bid=15740 А то без знания как оно работает у вас оно не заработает.
я уже спрашивал, а других форумах... мне дали такой код...
static void addProg ()
{
string progPath = Application.ExecutablePath;
string progName = “My Program”;
Process adding = new Process ();
adding.StartInfo.Arguments = “firewall add allowedprogram \”" + progPath + “\” \“" + progName + “\” ENABLE“;
adding.StartInfo.FileName = “C: \\Windows\\System32\\netsh.exe”;
adding.Start (); } ,
но он тоже ничего не дал...все та же ошибка...\
от интересно где мне 100% рабочий ТСР сервер достать...?
просто пишет «соединение адрес-сервера»..., а потом вырубает...
Попробуй установить какой-то сторонний гарантированно рабочий TCP сервер на 80 порт и получить подключение к нему через telnet. Есть подозрение что проблема или в настройках сервера или фаерволе, может между клиентом и сервером.
на серверском компе я просто в настройках вписал этот IP и он у меня не меняется...
На всякий случай еще один вопрос: клиент и сервер находятся в одной сети? Я к тому, что сервер случаем не удаленная машина с динамическим IP?
+1 к смене порта. Сталкивался с такой ерундой, когда с сокетами игрался.
Ты бы 80 порт сменил бы. Должно работать
{
this.BackColor = Color.GreenYellow;
StartServerThread = new Thread (new ThreadStart (ListenForCustomer));
StartServerThread.Start ();
}
public void ListenForCustomer ()
{
try
{
Listener = new TcpListener (LocalPort);
Listener.Start ();
while (true)
{
FromClientSocket = Listener.AcceptSocket ();
if (FromClientSocket.Connected)
{
Thread connect = new Thread (new ThreadStart (listener));
connect.Start ();
}
}
}
catch (SocketException ex)
{
MessageBox.Show (“Server: ” + ex.Message);
}
catch (InvalidOperationException ex)
{
MessageBox.Show (“Server: ” + ex.Message);
}
catch (System.ArgumentOutOfRangeException ex)
{
MessageBox.Show (ex.Message);
}
catch (Exception e)
{
}
}
Ну и код сервера давай уже раз такие пироги
{
try
{
IPAddress addr = IPAddress.Parse ( “192.168.1.1” );
client = new TcpClient ();
client.Connect (addr, 80);
sender = client.Client;
if (sender.Connected)
{
MessageBox.Show (“Client: Server was connectThread”);
Thread ListenerThread = new Thread (new ThreadStart (listener));
ListenerThread.Start ();
}
}
catch (SocketException ex)
{
MessageBox.Show (ex.Message + “SocketException” );
}
catch (Exception e)
{
MessageBox.Show (“Client error ” + e.Message);
}
}
єто код соединения клиента... что я делаю не так...?
просто написало че-то типа «соединение адрес-сервера...»
Сообщение какое после выкидывания написано в шеле? Черный экран перед выкидыванием появляется (полностью без надписей)?
Если есть просто черный экран с курсором (некоторое время) то значит соединение есть, если нет, то ковыряйте свой фаервол, таймаут сервера и прочее.
ничего... просто выкидывает...
в шеле что говорит?