2016-04-04 9 views
2

通信するTCPIPサーバーとクライアントアプリケーションを作成し、ランダムファイルを送信する必要があります。これまでのところ、私はこれを作った:TCPIPサーバー/クリエートアプリケーションの通信を修正する方法

サーバー:

static void Main(string[] args) 
{ 
    IPAddress localIP = IPAddress.Parse("127.0.0.1"); 
    TcpListener tcpServerListener = new TcpListener(localIP, 1234); 
    tcpServerListener.Start(); 
    Console.WriteLine("Service started..."); 
    while (true) 
    { 
     var serverSocket = tcpServerListener.AcceptTcpClient(); 
     Console.WriteLine("Request accepted!"); 
     if (serverSocket.Connected) 
     { 
      Do(serverSocket); 
     } 
     Console.WriteLine("Waiting for new request..."); 
     Console.ReadLine(); 
    } 
} 

private static void Do(TcpClient serverSocket) 
{ 
    var serverSockStream = serverSocket.GetStream(); 
    var reader = new StreamReader(serverSockStream); 
    var poruka = reader.ReadLine(); 
    var odgovor = "Hello " + poruka; 
    var writer = new StreamWriter(serverSockStream); 
    writer.Flush(); 
    reader.Close(); 
    writer.Close(); 
} 

クライアント:

static void Main(string[] args) 
{ 
    TcpClient tcpClient = new TcpClient("127.0.0.1", 1234); 
    NetworkStream clientSockStream = tcpClient.GetStream(); 
    var writer = new StreamWriter(clientSockStream); 
    writer.WriteLine("TCP/IP Client"); 
    writer.Flush(); 
    var reader = new StreamReader(clientSockStream); 
    var odgovor = reader.ReadLine(); 
    Console.WriteLine("Answer received: " + odgovor); 
    writer.Close(); 
    reader.Close(); 
} 

私が直面しています問題は、私はコミュニケーション、第二応答がクラッシュ達成後:

各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の1つの使用が通常許可されます

このエラーを修正して後でファイルを送信する方法を教えてください。 (後でシリアライズなど)

+0

ポート枯渇についての記事があります。それがBizTalkの記事であるという事実に惑わされてはいけません。問題を診断するためのクールな情報があります:https://msdn.microsoft.com/en-us/library/aa560610(v=bts.20) .aspx – mnemonic

+3

サーバーを何度も起動しようとしていませんか?クライアントとは異なり、それは終了しません(そして、 'Console.ReadLine'はあなたがEnterを押すまで別のクライアントを受け取らないようにします。いずれにしても、TCPは正しく取得するのが非常に難しいです。すでに動作しているものを使用したくないのですか?はいの場合は、まずTCPが動作する方法を学び、実際にどのような問題が発生しているか、さまざまな状態やエラーシナリオをすべて処理する方法を学びます。 – Luaan

+1

コミュニケーションの問題を解決したので、あなたはあなたの答えに正しいとフラグを立てるために別に答えられますか?ありがとう。 @Luaan –

答えて

1

サーバーを何度も起動しようとしていませんか?クライアントとは異なり、サーバーは決して終了せず、Console.ReadLineは、Enterキーを押すまで別のクライアントを受信できなくなります。新しいサーバーを起動しようとしているときに古いサーバーがバックグラウンドで停止していると仮定しますが、必ず失敗します。 ReadLineを取り除き、サーバーを終了するための適切な方法を追加し、複数のサーバーを同時に実行しないでください。うまくいくはずです。

カスタムTCPクライアント/サーバーアプリケーションの作成は非常に難しいです。 TCPは依然として非常に低レベルのプロトコルであり、期待通りに機能しない可能性があります。このパスに従うことを選択した場合は、まずTCPがどのように機能するかを学び、すべての通信状態とエラーを適切に処理する方法を学びます。

1

友人は、ここでホイールを再発明しているようです。これを行うために利用できるすべての技術があれば、「ソケット」レベルでこのようなことをする必要はありません。はるかに簡単:

  • は、一端にFTPサーバーを使用し、FTPクライアントは、ビルトインの.NET
  • に呼び出すクライアントがストリームを送信することができますメソッドを使用してWebサービスを記述します。

ソケット以外のもの。あなたは多くの時間を無駄にします。

+0

私は知っているが、これは私の仕事です。私は可能性の巨大な範囲があることを知っていますが、私はこれを行う必要があります。 @codenoire –

+0

Webサービスは、実際にはTCPサーバーです。 –

関連する問題