手机Client无法Socket连接到PC服务器(绝不是初级的模拟器配置问题!)
本帖最后由 lingshixiao 于 2010-03-23 21:09:30 编辑 这段时间在编写一套C/S程序,包含一PC服务器端程序,一PC客户端程序,一WM客户端程序,两个客户端基本一样,就是运行平台不同,现在用模拟器调试WM端,都能正确连接服务器端,而一旦用手机调试,则连接不上服务器,详情如下:
服务器监听192.168.1.20:9988(无线网卡上的地址),
PC客户端连接正常(说明服务器端口没有被封)
手机客户端用WIFI连接不上服务器端,但用手机上的浏览器访问http://192.168.1.20则能打开显示IIS7页面,说明手机到服务器的网络连接是正常的,
用数据线连接电脑后关闭WIFI测试,同上面一样,浏览器能通,但自己程序不能通
为什么手机客户端程序就是连不上服务器端呢(代码是没问题的,因为在模拟器中能连得上,且连接部分和PC客户端是一样的C#代码段)
请在这方面有经验的兄弟赐教,非常感谢!!!
[最优解释]
//负责服务器的TCP连接监听
public class NetListener
{
//服务器的TCP监听
private TcpListener tcpListener = null;
//监听线程
private Thread listenThread = null;
//监听端口号
private int listenPort = 0;
//是否正在监听连接
private bool isListenning = false;
public bool IsListenning
{
get
{
return isListenning;
}
}
//错误字符串
private string errmessage = "";
public string ErrMessage
{
get
{
return errmessage;
}
}
//NetServer引用对象
public NetServer ServerObj;
//构造函数
public NetListener(string ip, int port)
{
listenPort = port;
tcpListener = new TcpListener(IPAddress.Parse(ip), listenPort);
}
//开始监听
public bool StartListen()
{
//如果已经监听,则直接返回
if (this.isListenning)
return true;
//启动一个新的线程,执行方法ConnectListen(),以便来响应从服务器发回的信息
isListenning = true;
listenThread = new Thread(new ThreadStart(ConnectListen));
//listenThread.IsBackground = true;
listenThread.Start();
return true;
}
//监听连接的线程函数
private void ConnectListen()
{
//开始监听
try
{
tcpListener.Start();
}
catch (Exception ex)
{
//System.Windows.Forms.MessageBox.Show(ex.Message);
}
//循环接受连接请求
while (isListenning)
{
try
{
//当接收到一个客户端请求时,确认与客户端的连接
Socket socket = tcpListener.AcceptSocket();
//把socket交与ServerObj对象进行处理
ServerObj.AcceptSocket(socket);
}
catch (Exception ex)
{
errmessage = ex.Message;
}
}
}
//停止监听
public bool StopListen()
{
isListenning = false;
if (listenThread != null)
listenThread.Abort();
tcpListener.Server.Close();
tcpListener.Stop();
return true;
}
}
}
我记得在模拟器里面无论你如何连接,得到的结果都会是连接成功的,而实际上服务端根本没有接收到连接!
[其他解释]
xiayadong, 在模拟器里我不是你想的那样,也用的不是网上最广泛的那种配置方法,用了一种人家以前在Virtual PC里配置网络测试的方法,就是给主机Windows装上"回环"网卡,就是Microsoft LoopBack Adapter, 然后把模拟器上的网络绑定到这上面, 这个虚拟的回环网卡在Windows主机和模拟器里都可以设IP,然后在VS2008里连接设备的方式设成TCP连接,这样就可以完全模拟TCP网络
[其他解释]
你现在WIFI还没连接上么?
你先试一下PC通过WIFI连接服务端,看看能不能连接上!
找一台带无线网卡的本本测试一下,如果OK的话,只能在手机上找原因了
我原先写过WIFI连接sql,dopod真机上使用都没有问题的!
[其他解释]
真机通过数据线连接主机 activesync给他分配的地址或许如xiayadong所说的是私有地址, 可能改监听地址为0.0.0.0后能连接就是这个原因,但我现在还没有把WIFI连通, 这个现在还找不到原因, 毕竟同样经过无线路由,同样都有静态IP, 同样的C#代码, PC客户端在别的电脑上能连到我的主机,但手机就是连不上主机
我是在连接代码后面都紧接着一个Send的,有异常就报网络错误,而不仅仅通过Connect来判断是连上了还是连不上的
[其他解释]
我也遇到这问题了,socket client端在PDA上,在moto(wm5)的PDA上测试无论是通过wifi还是usb都能正确的传输数据,但是另一个PDA(wm6.1)只能通过usb连接PC才能正常传输,通过wifi无法传输数据,出现错误的语句是Client.Connect(strIP, "10200"),难道是ip配置的有问题?谁知道wm6.1如何配置ip啊?我在wm6.1中选择wirless...那个网络适配器进入以后设置固定ip