当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!
进行本地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!
相关文章推荐
- android使用socket于本地PC进行通信的问题
- android中利用Socket实现手机客户端与PC端进行通信
- android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序
- Android与PC的Socket(TCP/IP)通信(by USB) 拒绝连接的
- Android与PC客户端进行Socket通信的一些问题
- android的NDK和java进行本地socket通信
- android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序
- Android模拟器与pc,模拟器与模拟之间用socket进行通信
- android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序!
- Socket编程---使用无连接的数据报(UDP) 进行通信(转)
- android的NDK和java进行本地socket通信
- 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信
- 通过CMWAP进行SOCKET连接通信
- Anroid中两台手机连接同一wifi通过socket进行通信
- 使用 Wireshark 对本地 socket 通信进行数据抓包
- [转]为什么连接同一台交换机的不同网段的PC无法进行通信?
- android的NDK和java进行本地socket通信-----C服务端,java客户端
- 【网络通信】Wince 和 PC 通过USB 用Socket 进行通信
- android native c java进行本地socket通信
- android native c java进行本地socket通信----java服务端 C客户端