19,502
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 建立连接
/// </summary>
/// <param name="nIndex"></param>
/// <returns></returns>
public bool EstablishConnection(uint nIndex)
{
ReleaseConnection();
// 得到正确的连接信息
CONNMGR_DESTINATION_INFO DestInfo = new CONNMGR_DESTINATION_INFO();
int hResult = ConnMgrEnumDestinations((int)nIndex, ref DestInfo);
if (hResult >= 0)
{
// 初始化连接结构
CONNMGR_CONNECTIONINFO ConnInfo = new CONNMGR_CONNECTIONINFO();
ConnInfo.cbSize = (uint)Marshal.SizeOf(ConnInfo);
ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ConnInfo.dwFlags = CONNMGR_FLAG_PROXY_HTTP | CONNMGR_FLAG_PROXY_WAP | CONNMGR_FLAG_PROXY_SOCKS4 | CONNMGR_FLAG_PROXY_SOCKS5;
ConnInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
ConnInfo.guidDestNet = DestInfo.guid;
ConnInfo.bExclusive = 0;
ConnInfo.bDisabled = 0;
uint dwStatus = 0;
hResult = ConnMgrEstablishConnectionSync(ref ConnInfo, ref m_hConnection, 10 * 1000, ref dwStatus);
if (hResult < 0)
{
return false;
}
else
{
return true;
}
}
return false;
}
//执行先连接GPRS后,WM手机上显示出 正在连接GRPS...的字样,一会没了,我不确定是否真的通过手机卡连接上了GPRS
//然后我用TcpClient连接服务端,代码如下:
private void Connect(string toSStr)
{
try
{
if (_connectTimes == 10)
{
MessageBox.Show("连接超过10次未能正常连接,请检查网络!");
return;
}
_connectTimes++;
if (socket != null)
{
if (socket.Client.Client.Connected) return;
socket = null;
}
TcpClient cc = new TcpClient(AddressFamily.InterNetwork);
socket = new Mobile.Socket.SMSSocketClient(cc);//socket是封装的TcpClient的一个对象
//广域网IP和端口,这个连接服务端检测不到,线程不会到这里不走了吧?
socket.Connect("202.102.1.5", 8888);
socket.ReceiveData();
socket.OnStringDataAccept += new Maunite.Mobile.Socket.StringDataAccept(socket_OnStringDataAccept);
socket.OnClosed += new Maunite.Mobile.Socket.AsySocketClosedEvent(socket_OnClosed);
if (!String.IsNullOrEmpty(toSStr))
{
socket.Send(toSStr);
}
_connectTimes = 0;
}
catch (SocketException)
{
System.Threading.Thread.Sleep(200);
Connect(toSStr);
}
}
//因为通过ActiveSync 设备仿真器电脑上的模拟器去运行是本质是还是通过公司的网络去连接的服务端,
//这些代码执行没有错误,连接没问题,服务端显示的客户端IP和Port都是本公司的IP和端口信息
//但把程序打包成CAB装在手机上,拔掉手机与电脑的数据线,单独运行,服务端检测不到客户端 连接的信息,
//但搞不懂的是手机端这段连接的代码也不报错,也不显示程序界面这是什么个原因?
TcpClient cc = new TcpClient(AddressFamily.Unspecified);
TcpClient cc = new TcpClient(AddressFamily.Irda);