[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

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