2012-07-20 16 views
1

我有一個套接字,我試圖從客戶端發送信息到服務器。兩者位於同一網絡上,具有不同的局域網IP(如下所示):Android/C# - 我的套接字不會發送/聽

我的服務器是我的C#應用​​程序。 - 192.168.0.2 我的客戶端是我的Android應用程序。 - 192.168.0.7

這裏是我的TcpListener服務器:

server = new TcpListener(IPAddress.Parse("192.168.0.7"), 7079); 

這是我在客戶端連接:

Socket conn = new Socket("192.168.0.2", 7079); 

首先,我不知道該用什麼作爲的TcpListener IP 。顯然我有什麼是錯的,因爲它拋出了一個SocketExceptionThe requested address is not valid in its context

編輯:

第一個問題是解決了,我跑了使用模擬器,並把10.0.2.2用於連接IP。現在,C#拋出一個異常。這裏的周邊代碼:去除

完整的代碼,以防止浸出

在有while開頭的行,我得到一個ObjectDisposedException說,的NetworkStream配置。任何幫助?

回答

1

您不應該爲TCP Listener放置IP地址。客戶端用來連接的IP地址就是計算機的IP地址。只有客戶端應該爲Socket應該連接的地方添加一個IP地址。

編輯:由此我的意思是你應該使用「127.0.0.1」爲TCPListener,因爲這指向自己。然後您使用AcceptTcpClient方法接受客戶端。

發現你一個例子http://theanti9.wordpress.com/2008/02/13/c-tcplistener-example/

另一個編輯:對不起,也許這是IPAddress.Any用於監聽IP地址?我的C#對於它所期望的是生鏽的,但它應該是其中的一個。

另一個編輯:在您查看最新的代碼編輯之後,您正在偵聽循環中調用client.Close()。這導致客戶端關閉Socket連接,從而使您創建的Stream對象失效。這就是爲什麼它會給你提供ObjectDisposed錯誤,因爲Stream不再存在。

+0

謝謝,這是問題的一部分:)請閱讀我的編輯,我有另一個問題,你可能會幫助。 – DannyF247 2012-07-20 20:05:40

+0

@ DannyF247如果我在嘗試訪問套接字之後訪問套接字時,通常會出現此錯誤。你可以發佈你如何接受你的客戶端連接的代碼嗎? – 2012-07-20 20:37:17

+0

我已經在OP中包含了全功能代碼。 – DannyF247 2012-07-20 20:46:41

1

如果您使用的是Android仿真器,則需要注意IP地址。

報價馬蒂亞斯從與此相關的另一個堆棧溢出的答案的答案(在這裏找到:How to get the Android Emulator's IP address?

從你的應用程序中,你可以簡單地指仿真器爲 的‘localhost’或127.0.0.1。

Web流量通過您的開發機器路由,因此 模擬器的外部IP是由您的提供商分配給該機器的任何IP。開發機器始終可以在10.0.2.2從您的設備到達 。

假設開發機器正在運行您的服務器,如果您更改代碼以使用10.0.2.2 IP地址,則很可能會解決您的問題。

+0

我實際上是在物理設備上調試我的Android應用程序,這是否會改變什麼? – DannyF247 2012-07-20 19:27:39

+0

如果您使用的是物理設備,我認爲IP就像您當前所使用的那樣。在任何情況下,並確保首先檢查是否可以從開發計算機ping設備,如果設備可以ping您的開發機器(使用終端或應用程序發送ping命令) – 2012-07-20 19:33:23

+0

嗯,我可以ping它很好,但我只是決定切換到模擬器並使用'10.0.2.2'。即使在物理設備上進行調試時,情況可能也是如此。請閱讀我的編輯,我有另一個問題,你可能會幫助。謝謝! :) – DannyF247 2012-07-20 20:06:27