2012-03-26 3 views
1

ランダムな文字列がファイルに存在するかどうかをチェックするプログラムを作成する必要があります。そして、私はそうしました..しかし、今私はソケットの使用を要求されたsendメソッドとメソッドを受け取ります。私は接続を作成し、ここまでのコードを書いた..私はさらに進んでいくのですか?私はそれを理解することができません..最初のプログラムは、サーバー側のプログラムで私の試しです。 2番目はファイルから文字列を検索する私の実際のプログラムです。私の実際のプログラムでソケットを使用する方法に関するコードを教えてもらえますか?ありがとうalot .. :)Socket.Send and Receive ..さらに進めていく方法は?

class Program 
{ 
    static void Main(string[] args) 
    { 
     TcpListener serversocket = new TcpListener(8888); 
     int requestcount = 0; 
     TcpClient clientsocket = default(TcpClient); 
     serversocket.Start(); 
     Console.WriteLine(">> Server Started"); 
     clientsocket = serversocket.AcceptTcpClient(); 
     Console.WriteLine("Accept Connection From Client"); 
     requestcount = 0; 


     while ((true)) 
     { 
      try 
      { 
       requestcount = requestcount + 1; 
       NetworkStream networkstream = clientsocket.GetStream(); 
       byte[] bytesFrom = new byte[10025]; 
       networkstream.Read(bytesFrom, 0, (int)clientsocket.ReceiveBufferSize); 
       string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom); 
       dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$")); 
       Console.WriteLine(" >> Data from client - " + dataFromClient); 
       string serverResponse = "Server response " + Convert.ToString(requestcount); 
       Byte[] sendBytes = Encoding.ASCII.GetBytes(serverResponse); 
       networkstream.Write(sendBytes, 0, sendBytes.Length); 
       networkstream.Flush(); 
       Console.WriteLine(" >> " + serverResponse); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.ToString()); 
      } 
     } 
     clientsocket.Close(); 
     serversocket.Stop(); 
     Console.WriteLine(" >> exit"); 
     Console.ReadLine(); 
     } 
    } 

私は上記のプログラムで使用したいプログラムです。

クラスプログラム {ここで

static void Main(string[] args) 
    { 
     if (File.Exists("C://myfile2.txt")) 
     { 
      var text = File.ReadAllText("C://myfile2.txt"); 


      foreach (var word in new[] { "and", "so", "not", "c", "to", "by", "has", "do", "behavior", "dance", "france", "ok","thast", "please","hello","system","possible","impossible","absolutely","sachin","bradman","schumacher","http","console","application" }) 
      { 
       var w = word; 

       new Thread(() => Console.WriteLine("{0}: {1}", w, text.Contains(w) ? "Present" : "Not Present")).Start(); 
      } 

     } 
     else 
      Console.WriteLine("File Does not exist"); 
     Console.ReadLine(); 
    } 

} 
+0

2つのコードブロックはどのように関連していますか? – Alex

+0

適切であれば、宿題にタグを付けてください。そうでなければ、役に立たない回答が得られます(例えば、車輪を再構築しないでください)。 – sehe

+0

@sehe宿題ではありません。ちょうど私の最初の仕事に入った。私は初心者です。 – 3692

答えて

2

私はIDEなしで書いた迅速かつ汚いアイデアです(---私はそれをテストしていない--- 編集はただのnetcatでそれをテストし、それは正常に動作します):

  • 注:正規表現を使用しています。単語のルックアップテーブルが十分に大きくなる場合は、単語をHashSet<string>に保存し、入力を単語に分割する方がよいでしょう。 .IntersectWithを効率的に実行して、一致する単語があるかどうかを確認できます。ソケットのコンストラクタは廃止されていることを

  • 注意(あなたが明示的にバインドするために指定したIPAddressすることになっている)

  • あなたの元のコードは、別の単語(candyマッチcandの両方)であることを一致する必要はありません。 。

    • ReadAllText(大きなファイルのために拡張されません)
    • ループ内で複数の.Contains呼び出しを行う:あなたは、元の「grepの」スニペットに非効率的だった

    • その部分を修正したい場合があります(プリコンパイルされた)正規表現よりもはるかに効率が悪くなります
    • なぜそこにスレッドが作成されていますか?これは文字通りランタイムオーバーヘッドを追加し、Console.Outへの非同期アクセスのために潜在的に問題につながります。

using System; 
using System.IO; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Net.Sockets; 

class Program 
{ 
    private static Regex _regex = new Regex("and|so|not|c|to|by|has|do|behavior|dance|france|ok|thast|please|hello|system|possible|impossible|absolutely|sachin|bradman|schumacher|http|console|application", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant); 

    static void Main(string[] args) 
    { 
     TcpListener serversocket = new TcpListener(8888); 
     TcpClient clientsocket = default(TcpClient); 
     serversocket.Start(); 
     Console.WriteLine(">> Server Started"); 
     clientsocket = serversocket.AcceptTcpClient(); 
     Console.WriteLine("Accept Connection From Client"); 

     try 
     { 
      using (var reader = new StreamReader(clientsocket.GetStream())) 
      { 
       string line; 
       int lineNumber = 0; 
       while (null != (line = reader.ReadLine())) 
       { 
        lineNumber += 1; 
        foreach (Match match in _regex.Matches(line)) 
        { 
         Console.WriteLine("Line {0} matches {1}", lineNumber, match.Value); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.Error.WriteLine(ex.ToString()); 
     } 

     clientsocket.Close(); 
     serversocket.Stop(); 
     Console.WriteLine(" >> exit"); 
     Console.ReadLine(); 
    } 
} 
+0

私は本当にあなたの助けに感謝しています.. :)ありがとうトン。 :)私はあなたが示唆したすべてを暗示し、プログラムをより効率的にすることを確実にします。 :) – 3692

+0

ちょっと疑問がありましたが、ここでどのようにファイルを読むのですか?文字列がチェックされるべきファイル.. – 3692

+0

@ 3692私のサンプルはあなたの質問に従ってソケットからの読み込みを行います: "しかし、今はsockets.sendを使い、メソッドを受け取るように求められました"。私は 'netcat localhost 8888 sehe

関連する問題