2017-05-21 19 views
0

EDIT:私は同じポートを2回使用していました。グーグルでは誰でもこれをここに残しておくと、htisのようなスレッドが過去に私を助けてくれました。ソケットを複数回使用してTCPを送信して受信する(C#)

私は現在、サーバーとクライアントに高い評価を得ているプロジェクトの作業を行っています.2つのプロジェクトでデータを同期し、XMLで保存します。私はそれがすべてかなり働いているが、私は例外 "System.Net.Sockets.SocketException:各ソケットアドレスの1つの使用"を取得し続け、私はそれを取り除く方法を把握することはできません。私には、Recieveに移動する前にTcpClientUpdateに閉じてからコードが正常に見えます。誰かが私が行方不明になっていることを見つけ出すことができますか、または私が間違っていることを私に説明してください私はまったく新しいので、説明の中のいくつかの実際のコードは大いに役立つでしょう!

static void Main(string[] args) 
    { 
     Update(); 
     Recieve(); 

    } 

クライアントへの送信サーバー:クライアントからrecieving

public static void Update() 
    { 
     List<string> stringList = new List<string>(); 
     XmlDocument highScore = new XmlDocument(); 
     highScore.Load("hs.xml"); 
     for (int i = 0; i < 5; i++) 
     { 
      int placering = i + 1; 
      stringList.Add(highScore.SelectSingleNode("highScores/score" + (placering)).InnerText); 

     } 
     string toSend = stringList[0] + stringList[1] + stringList[2] + stringList[3] + stringList[4]; 

     string adress = "127.0.0.1"; 
     int port = 82; 
     TcpClient tcpClient = new TcpClient(); 

     tcpClient.Connect(adress, port); 
     NetworkStream stream = tcpClient.GetStream(); 

     Byte[] bSend = Encoding.ASCII.GetBytes(toSend); 
     NetworkStream tcpStream = tcpClient.GetStream(); 
     tcpStream.Write(bSend, 0, bSend.Length); 
     tcpClient.Close(); 
    } 

サーバー:

public static void Recieve() 
    { 
     //skapa ett TcpListener objekt 
     IPAddress myIp = IPAddress.Parse("127.0.0.1"); 
     TcpListener tcpListener; 
     int port = 82; 


     tcpListener = new TcpListener(myIp, port); 
     tcpListener.Start(); //Throws the exception 
     Socket socket = tcpListener.AcceptSocket(); 

     int messageSize; 
     Byte[] bMessage = new Byte[256]; 


     while (true) 
     { 
      try 
      { 
       messageSize = socket.Receive(bMessage); 
       break; 
      } 
      catch { } 
     } 

     //konvertera till string och skriv ut 
     string message = ""; 
     for (int i = 0; i < messageSize; i++) 
     { 
      message += Convert.ToChar(bMessage[i]); 
     } 

     for (int i = 0; i < 5; i++) 
     { 
      SaveScore(int.Parse(message[i].ToString()), i + 1); 
     } 

     socket.Close(); 
    } 

どちらの方法は、ゲームよりも別々の溶液中で同じProgram.csです。

+0

どの行が例外をスローしますか? – apocalypse

+0

tcpListener.Start()@apocalypse – AMaleWhale

答えて

0

ReceiveメソッドでもTcpListenerを停止する必要があります。これはアプリケーションの以前の実行からまだ開いている可能性がありますか?

0

基本的に私が発見した方法を書き直した後、単純なものの1つだったことが分かりました。私は、送信と受信の方法が両方とも、別のプロジェクトから貼り付けた後にポート82を使用していた...笑を助けようとしている人に感謝します

関連する問題