您的位置:首页 > 编程语言 > PHP开发

当SmartPhone与PC连接后,用本地Socket进行通信

2006-11-03 23:16 405 查看
这里我不是介绍Socket,而是介绍当手机同计算机连接后,如何建立本地Socket连接,而不是建立GPRS或者WAP方式的广域网Socket连接(关于如果建立GPRS或者WAP Socket连接我以后再介绍)。

进行本地Socket连接的时候,选用什么样的Socket的模型(异步、同步),我也不做介绍。但是,我要告诉大家SmartPhone和PC分别作为Socket Server时候,绑定的本地IP是什么。

一、以SmartPhone作为Server

我们这里不讨论,以SmartPhone作为Socket Server是否合理,只讨论如何让其成为Server。其实,以SmartPhone作为Server,与PC端的Socket编程是一样的,我们只须如此获取本地的绑定IP:

IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHost.AddressList[0];

其中,Dns.GetHostName(),为获取手机名(这里也可以通过注册表项获取)。

以SmartPhone作为Server主要就是要获取本地的绑定IP,我获取的IP为169.254.2.1,再有如果手机未与计算机连接是无法获取IP的。

二、以PC作为Server

以PC作为Server其实更简单,但是我们应当注意,在计算机接入局域网的情况下,获取本地绑定IP的时候,我们可能获取一组IP。这就需要我们判断哪个IP才是计算机与手机连接的有效IP,我获取的IP为:169.254.2.2。我认为微软为手机和计算机连接的虚拟IP为169网段的,所以我们可以通过169来判断这个有效IP。具体做法如下:

IPHostEntry ipHost = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = GetDesktopIpAddress(ipHost); // IP获取函数

private IPAddress GetDesktopIpAddress(IPHostEntry ipHost)
{
IPAddress ipAddress = null;
if (ipHost.AddressList.Length > 0)
{
for (int i = 0; i < ipHost.AddressList.Length; i++)
{

string ipAddrStr = ipHost.AddressList[i].ToString();
if (ipAddrStr.Substring(0, 3) == Global.Settings.DesktopIPMask)
{
ipAddress = ipHost.AddressList[i];
break;
}
}
}
return ipAddress;
}

注意:当我们以PC作为Server的时候,SmartPhone无须知道PC Server的IP,我们可以通过一下的方式获得PC Server 的IP:

public string getDesktopIP()
{
string m_ipAddress = "";
try
{
IPAddress ipAddress = Dns.GetHostByName("PPP_PEER").AddressList[0];
m_ipAddress = ipAddress.ToString();
}
catch
{
}

return m_ipAddress;
}

关键字:PPP_PEER,通过PPP_PEER来取得PC Server的IP(也可以通过注册表项来获得)

以上介绍的方式完全可以进行本地Socket通信,我只介绍了基本方式,至于大家可以写出什么样的SmartPhone/PC程序呢,就要看大家的想象力与编程功力了:) Good Luck!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: