2016-08-12 16 views
1

火我已經創建了剛剛打印出每當一個新的請求被接收線路的服務器:我連接到它的netcatAppServer.NewRequestReceived事件不會在SuperSocket

var server = new AppServer(); 
if (!server.Setup(2012) || !server.Start()) { 
    return; 
} 
server.NewSessionConnected += (session) => Console.WriteLine("new connection"); 
server.NewRequestReceived += (session, requestInfo) => Console.WriteLine("new request"); 

C:\Users\sashoalm>nc localhost 2012 
test 
test 
^C 
C:\Users\sashoalm>

它打印new connection,但從不打印new request,儘管在netcat中輸入2行。我知道每次輸入完整的一行時,netcat都會將文本發送到服務器(這就是netcat的工作方式)。

編輯:我發現可能會問同樣的事情,另一個(不是很好的措辭)懸而未決的問題 - How to send data to server using supersocket library,但我不能完全肯定,如果是同樣的問題。那傢伙試圖從代碼中發送數據。

另一個相關的問題 - C# SuperSocket without protocol。他們在那裏談論協議。如果您沒有指定一個SuperSocket,是否有默認協議?它是HTTP還是其他?

+0

它使用** telnet localhost 2012 **打印'新連接'和'新請求'。 – jsanalytics

+0

@jstreet你說得對。它適用於telnet,但不適用於netcat。我不明白會有什麼不同。也許它需要\ r \ n行尾和netcat只使用\ n,我不知道。 – sashoalm

+0

如果您構建一個簡單的客戶端併發送一個字符串列表,其中一些使用'\ r \ n',另一些使用沒有它,您將看到不同之處:列表中沒有'\ r \ n'的字符串被串聯與下一個確實擁有它,形成一個單一的請求。 – jsanalytics

回答

1

使用下面簡單的客戶端,在此基礎上MSDN Sample

static void Main(string[] args) 
    { 
     IPHostEntry ipHostInfo = Dns.Resolve("localhost"); 
     IPAddress ipAddress = ipHostInfo.AddressList[0]; 
     IPEndPoint remoteEP = new IPEndPoint(ipAddress, 2012); 

     Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

     sender.Connect(remoteEP); 

     Console.WriteLine("Socket connected to {0}", sender.RemoteEndPoint.ToString()); 

     List<string> list = new List<string> 
      { 
       "Test1\r\n", 
       "Test2", 
       "Test3\r\n", 
       "Test4\r\n", 
       "Test5\r\n", 
       "Test6\r\n", 
       "Test7", 
       "Test8\r\n", 
       "Test9\r\n", 
      }; 

     foreach (string s in list) 
      sender.Send(Encoding.ASCII.GetBytes(s)); 

     sender.Shutdown(SocketShutdown.Both); 
     sender.Close(); 
    } 

,並使用你的服務器的一個稍作修改的版本:

static void Main(string[] args) 
    { 
     var server = new AppServer(); 

     if (!server.Setup(2012) || !server.Start()) 
     { 
      return; 
     } 

     server.NewSessionConnected += (session) => Console.WriteLine("new connection"); 
     server.NewRequestReceived += (session, requestInfo) => Console.WriteLine("new request: Key={0}", requestInfo.Key); 

     Console.WriteLine("Press ENTER to exit...."); 
     Console.ReadLine(); 
    } 

顯示使用或不\r\n作爲終止的效果要求:

Press ENTER to exit.... 
new connection 
new request: Key=Test1 
new request: Key=Test2Test3 
new request: Key=Test4 
new request: Key=Test5 
new request: Key=Test6 
new request: Key=Test7Test8 
new request: Key=Test9 

沒有終止符的請求與下一個連接,直到找到終止符。