我检查过,发现问题是分配给 connectionEndpointPair 的 ip 地址带有 wi-fi 直连网络适配器的 IP,我不知道如何打开该特定 ip 上的端口,即 ip与我从我的电脑 ping 它时不同,当我使用 wi-fi ip 地址时,windows 正在监听端口 5009 并建立连接,但是当我使用 wi-fi 直接 ip 地址时,我遇到了问题
设备和 Windows 8.1 应用程序之间的 wi-fi 直接连接正常,然后我正在等待我的套接字连接但没有发生可能是什么问题?
我在 Visual Studio 上遇到错误:
由于目标机器主动拒绝,无法建立连接。 (HRESULT 异常:0x8007274D)
在 Windows 端我使用这段代码:
String deviceSelector = WiFiDirectDevice.GetDeviceSelector();
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(deviceSelector);
if(deviceCollection.Count > 0)
{
try
{
wfdDevice = await WiFiDirectDevice.FromIdAsync(deviceCollection[0].Id);
wfdDevice.ConnectionStatusChanged +=ConnectionStatusChangedNotficationHandler;
var endpointPairs = wfdDevice.GetConnectionEndpointPairs();
EndpointPair connectionEndpointPair = endpointPairs[0];
try
{
connectionEndpointPair.RemoteServiceName = "5009";
StreamSocket socket = new StreamSocket();
await socket.ConnectAsync(connectionEndpointPair);
string s = "hello";
}catch (Exception err)
{
string s = err.Message;
s = err.StackTrace;
}
}
catch (Exception err)
{
string error = err.Message;
}
在安卓端我使用这段代码:
private void initiateClientSocket(String hostAddress) {
int timeout = 10000;
int port = 5009;
InetSocketAddress socketAddress
= new InetSocketAddress(hostAddress, port);
try {
Socket socket = new Socket();
socket.bind(null);
socket.connect(socketAddress, timeout);
} catch (IOException e) {
Log.e(TAG, "IO Exception.", e);
}
// TODO Start Receiving Messages
}
从 android 端我得到:
java.net.UnknownHostException: 主机未解析:我的 ip
有什么可以帮忙的吗
谢谢:)
最佳答案
即使你的Android手机和windows电脑之间有一个直接的WIFI连接,你也需要一个服务器和一个客户端来进行tcp连接。
我不知道您的应用程序的用途,但我认为 Windows 计算机是服务器的更好选择。因此,您应该在计算机上打开端口的监听器,而不是连接到套接字。
与所选StreamSocket
类相关的服务器类是StreamSocketListener
。您可以在此处找到文档:http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.sockets.streamsocketlistener.aspx
本文档中还有一段是关于典型操作顺序的:
- 创建 StreamSocketListener。
- 使用 Control 属性检索 StreamSocketListenerControl 对象并设置所需的套接字服务质量。
- 将 ConnectionReceived 事件分配给事件处理程序。
- 调用 BindServiceNameAsync 或 BindEndpointAsync 方法以绑定(bind)到本地 TCP 端口或服务名称。
- 收到连接后,使用 StreamSocketListenerConnectionReceivedEventArgs 对象检索带有创建的 StreamSocket 对象的 Socket 属性。
- 使用 StreamSocket 对象发送和接收数据。
- 调用 Close 方法停止监听和接受传入的网络连接,并释放与 StreamSocketListener 对象关联的所有非托管资源。收到连接时创建的任何 StreamSocket 对象不受影响,可以根据需要继续使用。
我没有接触过这个特殊的类(class),但 TCP 的基础知识总是一样的......
关于c# - WIFI直连IP地址问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18410529/