超简单问题:PPC下Socket问题,走过,路过,别错过:)

micher_yan 2005-05-09 03:01:56
偶PDA支持802.11b,通过局域网内DHCP自动获得IP地址。
用PDA上的IE可以访问局域网内web网站,问题出在我移植Socket通讯上。
不论PPC上用Socket还是TcpClient,通讯都不行,能捕捉到的错误是:无法识别这种主机。
最后测试的程序如下:
private void button1_Click(object sender, System.EventArgs e)
{
TcpClient tcpc=new TcpClient();
byte[] buffer=new byte[64];
this.labelMsg.Text="正在连接...";
Application.DoEvents();
this.button1.Enabled=false;
try
{
//tcpc.Connect(this.textBoxHost.Text,int.Parse(this.textBoxPort.Text));
tcpc.Connect("192.168.0.137",8001);
Stream s;
s=tcpc.GetStream();
//buffer=Encoding.ASCII.GetBytes(this.textBoxCommand.Text);
//s.Write(buffer,0,this.textBoxCommand.Text.Length);
//for (int i=0;i<buffer.Length;i++)
// buffer[i]=0;
s.Write(Encoding.ASCII.GetBytes(this.textBoxCommand.Text),0,this.textBoxCommand.Text.Length);
int length=s.Read(buffer,0,buffer.Length);
this.labelMsg.Text=Encoding.ASCII.GetString(buffer,0,length);
tcpc.Close();
}
catch(Exception Ex)
{
this.labelMsg.Text=Ex.Message.ToString();
}
this.button1.Enabled=true;
}
应该不用怀疑我服务器上的通讯服务端,在windows上测试连接肯定没有问题。
郁闷完了……。
tcpc.Connect("192.168.0.137",8001);
把这里面的用域名或者主机名替换都不行(网内有DNS服务器和DHCP服务器)。
用PDA的IE时IP和域名都能返回。
...全文
176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
micher_yan 2005-05-30
  • 打赏
  • 举报
回复
sorry,问题搞定,
以下是代码:
try
{
IPAddress serverAddress;
serverAddress = IPAddress.Parse("192.168.0.137");
clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(serverAddress,8001);
clientSocket.Connect(iep);
byte[] buffer=new byte[3];
buffer[0]=50;
buffer[1]=51;
buffer[2]=52;
clientSocket.Send(buffer);
byte[] buffer2=new byte[3];
clientSocket.Receive(buffer2);
this.labelReceiveText.Text=System.Text.ASCIIEncoding.ASCII.GetString(buffer2,0,3);
MessageBox.Show("Conect Ok");
}
catch
{
MessageBox.Show("连接失败");
}
micher_yan 2005-05-30
  • 打赏
  • 举报
回复
to 3nt(更浅的蓝)
我看了你的实例片断,不过还是有问题,
以下是我的测试代码,
连接部分:
try
{
IPAddress serverAddress;
serverAddress = IPAddress.Parse("192.168.0.137");
clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint iep = new IPEndPoint(serverAddress,8001);
clientSocket.Connect(iep);
MessageBox.Show("Conect Ok");
}
catch(Exception Ex)
{
MessageBox.Show(Ex.Message.ToString());
}
发送数据部分:
if (this.clientSocket==null)
{
MessageBox.Show("Socket连接不存在。");
return;
}
if (!this.clientSocket.Connected)
{
MessageBox.Show("连接未打开。");
return;
}
try
{
byte[] buffer=new byte[255];
int len=System.Text.ASCIIEncoding.ASCII.GetBytes(this.textBoxSendText.Text,0,255,buffer,0);
this.clientSocket.Send(buffer,0,len,SocketFlags.None);
MessageBox.Show("发送成功。");
}
catch(Exception Ex)
{
MessageBox.Show(Ex.ToString());
//错误在这弹出:ArgumentOutOfRangeException
}
晕了!!
3nt 2005-05-28
  • 打赏
  • 举报
回复
请参考我在这个贴里面的答复:
http://community.csdn.net/Expert/topic/4033/4033677.xml?temp=.6421472

此外 NetworkStram看似简单易用,实则相当的不好用。还是用 Socket 的Send, BeginSend为好。
neiephwd 2005-05-24
  • 打赏
  • 举报
回复
我刚学,也遇到了同样的问题,不知道您是怎么解决的啊,急啊,试了一天拉
micher_yan 2005-05-24
  • 打赏
  • 举报
回复
晕了,还是不行哦
micher_yan 2005-05-23
  • 打赏
  • 举报
回复
不好意思,前几天出差了,现在马上测试一下……
yuewen 2005-05-18
  • 打赏
  • 举报
回复
IsIPAddress(mIP)是自己写的判断是否是数字格式的IP地址的方法,不是.net cf的方法。
yuewen 2005-05-18
  • 打赏
  • 举报
回复
.NET精简版当然支持Socket,而且还支持异步的Socket。
需要注意的是有两个bug。
一个是在解析地址时,在PPC上,如果是数字格式的IP地址的话,不能用Resolve方法解析,只能用下面的代码:
IPAddress ipAddress;
if(IsIPAddress(mIP))
{
ipAddress = IPAddress.Parse(mIP);
}
else
{
ipAddress = Dns.Resolve(mIP).AddressList[0];
}
还有一个bug是连接时,如果连接失败的话,也会报告连接成功。所以此时需要再反送一个数据包验证是否确实连接成功了。

TcpClient的方式我没有试过,不过Socket完全是可以正常工作的。
wunifeng 2005-05-18
  • 打赏
  • 举报
回复
超简单楼主还来问-_-!!
meyoushe 2005-05-17
  • 打赏
  • 举报
回复
对用WebServices,这样更方便,(我想你先不用程序连接服务器,通过IE连接服务器,看有没有问题)
micher_yan 2005-05-13
  • 打赏
  • 举报
回复
自己顶一下,没办法了,呵呵,
m$站点有片文章说:
目前的.net精简版框架不支持Socket……,后来只有改用WebServices了

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧