2011-10-21 39 views
2

我想發送一些信息到Android使用Monodroid的服務器。使用套接字傳輸數據與MonoDroid

的代碼如下:

public void sendSomething() 
    { 
     sock = new TcpClient(); 
     sock.Connect(Dns.GetHostAddresses("a.domain.com"), 7777); 

     String d; 
     d = "somedata"; 

     StreamWriter w = new StreamWriter(sock.GetStream()); 
     // StreamReader r = new StreamReader(sock.GetStream()); 

     w.WriteLine(d); 
     w.Flush(); 

     sock.Close(); 
    } 

如果我運行在一個WinForms應用程序完全相同的程序它工作正常,但在MonoDroid的鏈接點擊一個按鈕時(在Android虛擬設備上運行 - 我使用評估版本)服務器將看到連接但沒有收到數據。

有沒有人有任何想法,爲什麼這可能是?

(編輯以ammend代碼)

+0

其他客戶端應用程序是否在虛擬設備上工作?例如。你能從瀏覽器訪問一個基本的網頁嗎?接收電子郵件等? –

+0

嗨,是的,我可以訪問設備的內置瀏覽器的網頁 – Pleng

回答

1

這可能是服務器問題。例如。假設:

a)您的Winform應用程序運行在Windows/MS.NET(而不是Mono/Linux或OSX上);

B)你的服務器是基於Windows也和沒有一個ReadLine讀取插槽

,將寫入之間的NewLine(Unix的\n)和讀(的Windows \r\n\)可以解釋爲什麼服務器不報告什麼正在閱讀。

你能告訴我們你是如何讀取服務器上的數據嗎? (編輯您的問題)

+0

謝謝你解決了這個問題! 我改變了: d =「somedata」; 至 d =「somedata \ r \ n」; 它現在正在工作我的一天很長一段時間頭痛開始清理! :) – Pleng

+0

很高興它做到了:-)你也可以設置'NewLine'屬性(StreamWriter從'TextWriter'獲得)以匹配Windows新行(或者更改服務器應用程序中的'StreamReader')。只要兩者相同,你應該沒問題。 – poupou