Android / C# - 我的套接字不会发送/收听

时间:2012-07-20 19:07:07

标签: c# android sockets

我有一个套接字,我正在尝试从客户端向服务器发送信息。两者都位于同一网络上,具有不同的LAN IP(如下所示):

我的服务器是我的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已被释放。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

如果您使用的是Android模拟器,则需要注意IP地址。

引用Matthias从另一个与此相关的Stack Overflow答案的答案(在此处找到:How to get the Android Emulator's IP address?

  

在您的应用中,您可以简单地将模拟器称为   'localhost'或127.0.0.1。

     

网络流量通过您的开发机器进行路由,因此   模拟器的外部IP是指分配给它的IP   机器由您的提供商。开发机器总是可以的   从你的设备到达10.0.2.2。

假设开发机器正在运行您的服务器,如果您更改代码以使用10.0.2.2 IP地址,您的问题很可能会得到解决。

答案 1 :(得分:1)

您不应该为TCP Listener添加IP地址。客户端用于连接的IP地址只是计算机的IP地址。只有客户端应为Socket应连接的位置添加IP地址。

编辑:我的意思是你应该为TCPListener使用“127.0.0.1”因为它指向自己。然后使用AcceptTcpClient方法接受客户端。

找到一个示例http://theanti9.wordpress.com/2008/02/13/c-tcplistener-example/

另一个编辑:抱歉,听众IP地址可能是IPAddress.Any?我的C#对于它的期望是生锈的,但它应该是其中之一。

另一个编辑:查看最新的代码编辑后,您在监听循环中调用client.Close()。这导致客户端关闭Socket连接,从而使您创建的Stream对象无效。这就是它给你ObjectDisposed错误的原因,因为Stream不再存在了。