2016-07-08 6 views
-1

クライアントコンソールに文字列を入力してサーバーコンソールで受信できるC#のチャットアプリケーションを構築したいとします。C#コンソール - インターネットでペアリングされたアプリケーション

意味:ユーザーBは、ユーザーA以外の場所にある自分のコンピューター上でクライアントプログラムを実行します。クライアントプログラムは、ユーザーAが自分のコンピューターで開いているサーバープログラムにTCP経由で接続します。ユーザーBがプログラム内の文字列を入力してEnterキーを押すと、ユーザーAはインターネット経由の文字列を受信します。

私はそのようなものがあります。

サーバー:

static void Main(string[] args) 
{ 

    Console.WriteLine("Start Server ..."); 


    IPAddress b = IPAddress.Any; 
    TcpListener Server = new TcpListener(b, 5550); 
    Server.Start(); 
    Console.WriteLine("Server started."); 

    Console.WriteLine("Wait for Connection..."); 
    TcpClient Client = Server.AcceptTcpClient(); 
    Console.WriteLine("Succeeded"); 

    Stream MessageStream = Client.GetStream(); 

    while (true) 
    { 
     byte[] message = new byte[4096]; 
     int bytesRead; 
     try 
     { 
      bytesRead = MessageStream.Read(message, 0, 4096); 

      ASCIIEncoding encoder = new ASCIIEncoding(); 
      Console.WriteLine(encoder.GetString(message, 0, bytesRead)); 
     } 

     catch (IOException) 
     { 
      break; 
     } 
    } 

    Client.Close(); 
    Server.Stop(); 
} 

はクライアント:

static void Main(string[] args) 
{ 
    IPAddress IP = IPAddress.Parse("192.168.2.140"); 
    TcpClient Client = new TcpClient(); 
    Client.Connect(IP, 5550); 

    Stream MessageStream = Client.GetStream(); 
    Console.WriteLine("Success"); 

    ASCIIEncoding encoder = new ASCIIEncoding(); 

    Console.WriteLine("Enter Text here"); 

    var input = Console.ReadLine(); 
    if(input != null) 
    { 
     byte[] buffer = encoder.GetBytes(input); 

     MessageStream.Write(buffer, 0, buffer.Length); 
     MessageStream.Flush(); 
    } 

    Console.ReadLine(); 
} 

私は私のラップトップ上で、私のPCやサーバー上でクライアントを実行しますそれはうまく動作しますが、私のローカルネットワーク外のコンピュータとはどのように動作しますか?私はcanihazip.comから入手WAN IP、と IPAddress IP = IPAddress.Parse("192.168.2.140");
を交換した場合

、それは接続する必要はありません。

EDIT:

ポート転送は、私は問題がある Port Forwarding

を推測有効に

:私が望むように、それは私の自宅のローカルネットワークで動作し、それが接続されて、私はテキストを書くことができ、サーバーアプリケーションに表示されます。しかし、私はいくつかの友人にこれを試すように頼むと、私のサーバーに接続することはできません。

+2

これはネットワーキングの問題のように聞こえます - あなたのispがあなたをブロックしておらず、ルータにこれらのポートが適切に転送されていることを確認してください。 –

+1

プログラミングに関する質問ではありませんが、これは本当にITに関する質問です。 – BradleyDotNET

+0

@ DanielA.White私のポストの編集を参照してください、それはポストフォワーディングをサポートしています。私が述べたように、私のローカルネットワークでは正常に動作しますが、それ以外では、私の友人に試してみると、クライアントは自分のネットワークからサーバアプリケーションに接続できません – Flauschcoder

答えて

0

ルータの管理インターフェイスに移動し、インターネットから特定のポートでシステムのIPアドレスに転送する必要がありますネットワークの背後にある。それはあなたのルータに完全に依存し、あなたが知る必要があることを素早くGoogle検索が教えてくれます。 OP編集から

更新:そこからそう

、あなたはパブリックポートと公衆IP経由でアクセスし、LANポートでリッスンするようにシステムを設定します。もう一つの効果的なことは、前に使用していたduckdns.comのような無料のダイナミックDNSサービスを使用することです。実際の名前を取得するには、 - あなたのISPから静的IPアドレスを購入していない場合、動的であり、将来変化します。

+0

私の投稿を見て、 、その右の場合 – Flauschcoder

+0

@Flauschcoder、私の更新を参照してください。 –

関連する問題