2011-07-28 31 views
0

私はC#でソケット通信のための小さなプログラムを作っています。私のコードをHere're: クライアント(データ送信側):ソケット通信エラー

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 

namespace Client 
{ 
class Program 
{ 
    static Socket sck; //vytvor socket 
    static void Main(string[] args) 
    { 
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
     IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); //nastav premennú loacalEndPoint na lokálnu ip a port 1234 
     try //Skús sa 
     { 
      sck.Connect(localEndPoint); // pripojiť 

     } 
     catch { //ak sa to nepodarí 
      Console.Write("Unable to connect to remote ip end point \r\n"); //vypíš chybovú hlášku 
      Main(args); 
     } 

     Console.Write("Enter text: "); 
     string text = Console.ReadLine(); 
     byte[] data = Encoding.ASCII.GetBytes(text); 
     sck.Send(data); 
     Console.Write("Data sent!\r\n"); 
     Console.Write("Press any key to continue..."); 
     Console.Read(); 
     sck.Close(); 
    } 
} 
} 

サーバー(データreciver):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Net; 
using System.Net.Sockets; 


namespace Server 
{ 
class Program 
{ 
    static byte[] Buffer { get; set; } //vytvor Buffer 
    static Socket sck; 

    static void Main(string[] args) 
    { 
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //vytvor Socket 
     sck.Bind(new IPEndPoint(0, 1234)); 
     sck.Listen(80); 
     Socket accepted = sck.Accept(); 
     Buffer = new byte[accepted.SendBufferSize]; 
     int bytesRead = accepted.Receive(Buffer); 
     byte[] formatted = new byte[bytesRead]; //vytvor novú Array a jej dĺžka bude dĺžka priatých infomácii 
     for(int i=0; i<bytesRead;i++){ 
      formatted[i] = Buffer[i]; //načítaj z Buffer do formatted všetky priate Bajty 

     } 
     string strData = Encoding.ASCII.GetString(formatted); //z ASCII hodnôt urob reťazec 
     Console.Write(strData + "\r\n"); //vypíš data 
     sck.Close(); //ukonči spojenie 


    } 
} 

} 私の問題がある:クライアントプログラムでは、私はポート1234上でデータを送信していますローカルIPに。しかし、私は接続できません。私はポート80を試して、それは接続しています。だから私の問題はどこですか?どのように私は誰のポートにも接続できますか?コード内のコメントを無視してください。

+0

がファイアウォールを確認してください。 – Odys

+0

これらのプログラムは、(ロック解除)あなたがそれらをインストールするポートを登録。 – Odys

+0

両方で住所がが、私は、コードを持っています、私はすべてのファイアウォールを持っていますdオフ。どこに問題がありますか? – FrewCen

答えて

1

あなたがポート80でリッスンしているが、それはあなたのクライアントプログラムが接続するポートです。 "1234"はサーバーがバインドされているローカルポートです。そのポートでリッスンしているものはありません。サーバが聞くんIP上

1

?あなたはnetstat -anで確認しましたか? FIND "LISTEN"を検索"1234"を見つけますか? (注:あなたの言語表現を聞いて交換してください...)。

0 127.0.0.1が、最初のNICの最初に割り当てられたIPアドレス...(0

私はいつも使用します...残念ながら、すべてのインターフェイスに耳を傾ける...しかしべきであるができない場合がありIP-私は今、動作しないクライアントとサーバ

HTH

マリオ