[C#] Połączenie klient-serwer

0

Witam;)

Chcąc rozwinąć wiedzę o C# postanowiłem napisać prostą grę rozszerzoną o możliwość gry on-line. W tym celu spróbowałem sił w pisaniu aplikacji sieciowych, jednak już na początku napotkałem problem - nie potrafię się połączyć z innym komputerem w sieci (napisać aplikację - serwer - do obsługi takiego połączenia).
http://www.wbrian.yoyo.pl/App.rar - tutaj znajduje się aplikacja (klient i serwer). Proszę o podpowiedzi co zrobić aby możliwe było połączenie.

Pozdrawiam:D

0

Znajdź jakiś tutorial w sieci, przeczytaj go i wykonaj.

0

Na podstawie http://helion.pl/ksiazki/c_tworzenie_aplikacji_sieciowych_101_gotowych_projektow_slawomir_orlowski,cshtas.htm oraz http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener(VS.71).aspx wnioskuję, że:
Klient:

TcpClient client;
client = new TcpClient(IP, port);

próbuje nawiązać połączenie z numerem IP na określonym porcie

Serwer:

TcpListener server;
server = new TcpListener(IPAddress.Parse("127.0.0.1"),port);
server.Start();
client = server.AcceptTcpClient();

oczekuje na połączenia na określonym porcie.

O ile klient łączy się z innym komputerem z portem 80, o tyle nie łączy się z serwerem na moim komputerze (jak już mówiłem 127.0.0.1 działa a moje IP - które mogę odczytać np z http://www.ip-adress.com/ - już nie) - wywala System.Net.Sockets.SocketExeption: Próba połączenia nie powiodła się, ponieważ połączona strona nie odpowiedziała po ustalonym okresie czasu lub utworzone połączenie nie powiodło się, ponieważ połączony hist nie odpowiedział.

Jeśli błędnie rozumuję proszę o poprawę;)

Pozdrawiam

0

brzmi tak jakbyś zaponiał wyłączyc firewall. do testow polecam klienta telnet. pozostale rozumowanie jest jak najbardziej OK.

łopatologicznie rozpisane klient server znajdziesz tu: http://www.centrumxp.pl/dotNet/831,1,Komunikator_w_C.aspx

0

Mam router więc myślałem, że to tutaj należy szukać przyczyny. Jednak przetestowałem klienta na serwerze Apache - łączył się - z moim serwerem już nie chciał. Wysłałem znajomej serwer - również nie mogłem się połączyć. Firewalle były wyłączone.

0

może zapomniałeś zmienić tego:
server = new TcpListener(IPAddress.Parse("127.0.0.1"),port);
Jeśli masz router to musisz zrobić froward na porcie inaczej się nie połączysz ze swoim publicznym ip. Jeśli koleżanka też ma router, to sytuacja identyczna.

0

btw. jeśli masz router, to oprócz publicznego ip(router) i loopbacka masz jeszcze jedno ip lanowe(prawdopodobnie 192.168..). Start->Run(Uruchom)->cmd->ipconfig /all. Na nim popróbuj.

0

jak masz router to wlacz DMZ na twoje IP i spokój.

0

kod po stronie serwa wygląda w tej chwili tak:

private void bStart_Click(object sender, EventArgs e)
        {
            try
            {
                server = new TcpListener(IPAddress.Parse("127.0.0.1"),1000);
                server.Start();
                client = server.AcceptTcpClient();
                textBox1.Text += "Nawiązano połączenie" + Environment.NewLine;
                client.Close();
                server.Stop();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

192.168.1.100 - to moje ip w sieci lokalnej - tak jak poprzednio połączenie z serwerem Apache działa po podaniu tego IP, a połączenie z moim serwerem nie. Przekierowanie portu oczywiście było, włączyłem również DMZ. Wywaliłem virtualboxa, wyłączyłem firewalla - Avira raczej nie zablokuje połączenia więc jej nie tykałem.

0
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.Net;
using System.Net.Sockets;

namespace FormsTest
{
    public partial class Form1 : Form
    {

        private TcpListener server { get; set; }
        private TcpClient client { get; set; }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                server = new TcpListener(IPAddress.Parse("127.0.0.1"), 1000);
                server.Start();
                client = server.AcceptTcpClient();
                textBox1.Text += "Nawiązano połączenie" + Environment.NewLine;
                client.Close();
                server.Stop();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }
}

twój kod działa u mnie idealnie. Używam putty, więc host name: 127.0.0.1, connection type: raw, port: 1000

0

Szukałem innych aplikacji umożliwiających połączenie klient-serwer. Okazało się, że nie jest to problem w kodzie tylko problem - szczerze mówiąc nie mam pojęcia jaki i nie mam już pomysłu co mogłoby blokować połączenie do mojego komputera z serwerem napisanym w C#...

0

proponuje na początek sprawdzić czy przyczyna nie jest router i połączyć się do sieci bezpośrednio, jeśli to nie pomoże to zalecam dogłębna analiza redundantnych firewalli. Dobrze by było też zajrzeć do EventLogu bo możliwe że jeśli jakaś aplikacja trzecia blokuje to dodaje również tam wpis o tym zdarzeniu

1 użytkowników online, w tym zalogowanych: 0, gości: 1