wince6 TCP通信

manrong 2013-08-19 05:08:37
计算机作为服务端,wince作为客户端tcp通信程序,用usb连接计算机同步的时候可以实现tcp通信,但是拔掉usb后tcp通信就失败了,用wince的tcp通信程序只是用网线连接计算机不用usb,然后通信就报错“试图对无法访问的计算机执行套接字操作”。这是什么原因,求解决。。。
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Net; //TCP/IP
using System.Net.Sockets;
using System.IO; //流读写
using System.Threading;//多线程
using System.Text.RegularExpressions;//正则表达式


namespace SmartDeviceProject9
{
public partial class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 定义变量
/// </summary>
public Thread thread;
public TcpClient tcpClient;
public NetworkStream netStream;
public StreamWriter streamWriter;
public StreamReader streamReader;
/// <summary>
/// 构造函数
/// </summary>
public Form1()
{ //初始化界面
InitializeComponent();


}
/// <summary>
/// 连接服务器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
try
{
Socket newclient=new Socket (AddressFamily.InterNetwork ,SocketType.Stream , ProtocolType.Tcp) ;
tcpClient = new TcpClient("192.168.1.31", 45671);
IPEndPoint ie = new IPEndPoint(IPAddress.Parse("192.168.1.31"),45671);
// newclient.Bind(ie);
//newclient.Listen(100);
newclient.Connect(ie);
netStream = tcpClient.GetStream();//取得网络流
streamWriter = new StreamWriter(netStream);//创建streamWriter,向流中写字符
streamReader = new StreamReader(netStream);//创建streamReader,向流中读字符
textBox1.Text = "连接成功";
thread = new Thread(new ThreadStart(recieveData));//创建接收线程
thread.Start();//启动接收线程,死循环接收数据

}
catch (Exception err)
{
MessageBox.Show(err.ToString());
}


}
/// <summary>
/// 断开连接
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
try
{
streamReader.Close();
streamWriter.Close();
netStream.Close();
tcpClient.Close();
textBox1.Text = "连接已经断开";
}
catch (Exception err)
{
MessageBox.Show(err.ToString());
}



}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
try
{
// string s = getData();//跨线程
// streamWriter.Write(s);//写入流
streamWriter.Write(textBox1 .Text );//写入流
streamWriter.Flush(); //刷新当前数据流中的数据

}
catch (Exception err)
{
MessageBox.Show(err.Message);
}

}
/// <summary>
/// 接收数据并处理
/// </summary>
#region

private void recieveData()
{
try
{
while (true)
{
// Receive the TcpServer.response.
byte[] data = new Byte[tcpClient.ReceiveBufferSize];// Buffer to store the response bytes.
// Receive the TcpServer.response.
String responseData = String.Empty;
// Read the first batch of the TcpServer response bytes.
netStream.Read(data, 0, (int)tcpClient.ReceiveBufferSize);
responseData = System.Text.Encoding.UTF8.GetString(data, 0, data.Length);//重编码

setData(responseData);//跨线程调用控件,处理数据

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

#endregion

/// <summary>
/// 跨线程操作控件(设置)
/// </summary>
/// <param name="data"></param>
#region
private delegate void SET(string data);//要求签名相同
public void setData(string data)
{
if (textBox1.InvokeRequired) //检查控件的属性
{
SET ex = new SET(setData); //创建本方法的委托实例
textBox1.Invoke(ex, new string[] { data }); //调用控件的唤醒操作,传递相应参数
}
else
{
textBox1.Text = data; ; //控件操作
}
}
#endregion

private void Form1_Load(object sender, EventArgs e)
{

}


/// <summary>
/// 跨线程调用控件(获取)
/// </summary>
/// <returns></returns>
#region
private delegate string GET(); //要求签名相同
public string getData()
{
string data = "";
if (textBox1.InvokeRequired) //检查控件的属性
{
GET ex = new GET(getData); //创建本方法的委托实例
textBox1.Invoke(ex, new string[] { }); //调用控件的唤醒操作,传递相应参数
}
else
{
data = textBox1.Text; //操作控件
}
return (data);
}

#endregion


}
}
...全文
231 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
manrong 2013-08-20
  • 打赏
  • 举报
回复
引用 8 楼 brantyou 的回复:
使用USB同步和wifi网络,你的wince设备和PC机的IP应该是同一个段的局域网IP。这个时候,你通信的话,可以直接采用路由分配的IP进行通讯。 但如果你使用的是2G/3G网络时,你的wince设备和PC间的网络通讯就应该是公网IP通讯,PC端的IP需要在路由映射一个端口到外网,让你的wince设备可以通过这个端口链接到你的PC端上,这样才能进行通讯
那是不是我用路由作为计算机和PDA的中间媒介,就可以实现用网络通信?
manrong 2013-08-20
  • 打赏
  • 举报
回复
引用 7 楼 91program 的回复:
这不只是设置的问题,你要看你的设备是否具有上网的硬件条件:无线网络,移动设备一般不会有有线网络的。 假如有无线上网设备,则在定制 OS 时也需要增加相应的组件,然后在拨号网络中建立拨号链接后进行拨号,这样设备就可以上网了。最后,才能进行通讯程序的调试。
现在的问题是我用wifi可能实现TCP通信,也不需要连接usb,但是用PDA上面的网络端口连接PC就不可以用TCP通信,自定义IP,用网线连接后,在计算机上是ping不通的,是不是我要先进入一个局域网内,然后才可以通信?
一介布衣萧萧 2013-08-20
  • 打赏
  • 举报
回复
使用USB同步和wifi网络,你的wince设备和PC机的IP应该是同一个段的局域网IP。这个时候,你通信的话,可以直接采用路由分配的IP进行通讯。 但如果你使用的是2G/3G网络时,你的wince设备和PC间的网络通讯就应该是公网IP通讯,PC端的IP需要在路由映射一个端口到外网,让你的wince设备可以通过这个端口链接到你的PC端上,这样才能进行通讯
91program 2013-08-20
  • 打赏
  • 举报
回复
这不只是设置的问题,你要看你的设备是否具有上网的硬件条件:无线网络,移动设备一般不会有有线网络的。 假如有无线上网设备,则在定制 OS 时也需要增加相应的组件,然后在拨号网络中建立拨号链接后进行拨号,这样设备就可以上网了。最后,才能进行通讯程序的调试。
manrong 2013-08-20
  • 打赏
  • 举报
回复
引用 4 楼 91program 的回复:
[quote=引用 2 楼 jonsenwu 的回复:] 说明你设备网络是不通的,连接USB时能通讯主要是因为 ACTIVE SYNC 链接电脑的网络上网的,你把电脑网络关了,再看看连着USB能不能TCP通讯
如 LS 所言,你的设备在不连接 ActiveSync 时有联网的东东吗?无线:2G/3G、WIFI 或有线,当然一般移动设备都是无线的。[/quote]我就是不知道什么什么原因,不过我试了下,PDA上不了网,也不知道怎么设置。
manrong 2013-08-20
  • 打赏
  • 举报
回复
引用 2 楼 jonsenwu 的回复:
说明你设备网络是不通的,连接USB时能通讯主要是因为 ACTIVE SYNC 链接电脑的网络上网的,你把电脑网络关了,再看看连着USB能不能TCP通讯
你意思是我的PDA自身的网络有问题?是设置问题?还是系统问题?
91program 2013-08-20
  • 打赏
  • 举报
回复
引用 2 楼 jonsenwu 的回复:
说明你设备网络是不通的,连接USB时能通讯主要是因为 ACTIVE SYNC 链接电脑的网络上网的,你把电脑网络关了,再看看连着USB能不能TCP通讯
如 LS 所言,你的设备在不连接 ActiveSync 时有联网的东东吗?无线:2G/3G、WIFI 或有线,当然一般移动设备都是无线的。
manrong 2013-08-20
  • 打赏
  • 举报
回复
引用 1 楼 91program 的回复:
拔掉usb后你的设备是如何上网的?
用网线插上PDA上不了网络,这是什么原因?还要什么设置的嘛?
一介布衣萧萧 2013-08-20
  • 打赏
  • 举报
回复
引用 12 楼 manrong 的回复:
[quote=引用 11 楼 brantyou 的回复:] [quote=引用 10 楼 manrong 的回复:] [quote=引用 8 楼 brantyou 的回复:] 使用USB同步和wifi网络,你的wince设备和PC机的IP应该是同一个段的局域网IP。这个时候,你通信的话,可以直接采用路由分配的IP进行通讯。 但如果你使用的是2G/3G网络时,你的wince设备和PC间的网络通讯就应该是公网IP通讯,PC端的IP需要在路由映射一个端口到外网,让你的wince设备可以通过这个端口链接到你的PC端上,这样才能进行通讯
那是不是我用路由作为计算机和PDA的中间媒介,就可以实现用网络通信?[/quote] 对,你如果是直接接的网线,那么把你的wince用网线接到路由那边的话,就可以组成局域网,就可以进行网络通讯。 IP就直接使用的局域网IP[/quote]是不是就只有这种方法了,直接计算机网络口接上PDA可行否?[/quote] 这样的话,估计你得用交叉线才行
manrong 2013-08-20
  • 打赏
  • 举报
回复
引用 11 楼 brantyou 的回复:
[quote=引用 10 楼 manrong 的回复:] [quote=引用 8 楼 brantyou 的回复:] 使用USB同步和wifi网络,你的wince设备和PC机的IP应该是同一个段的局域网IP。这个时候,你通信的话,可以直接采用路由分配的IP进行通讯。 但如果你使用的是2G/3G网络时,你的wince设备和PC间的网络通讯就应该是公网IP通讯,PC端的IP需要在路由映射一个端口到外网,让你的wince设备可以通过这个端口链接到你的PC端上,这样才能进行通讯
那是不是我用路由作为计算机和PDA的中间媒介,就可以实现用网络通信?[/quote] 对,你如果是直接接的网线,那么把你的wince用网线接到路由那边的话,就可以组成局域网,就可以进行网络通讯。 IP就直接使用的局域网IP[/quote]是不是就只有这种方法了,直接计算机网络口接上PDA可行否?
一介布衣萧萧 2013-08-20
  • 打赏
  • 举报
回复
引用 10 楼 manrong 的回复:
[quote=引用 8 楼 brantyou 的回复:] 使用USB同步和wifi网络,你的wince设备和PC机的IP应该是同一个段的局域网IP。这个时候,你通信的话,可以直接采用路由分配的IP进行通讯。 但如果你使用的是2G/3G网络时,你的wince设备和PC间的网络通讯就应该是公网IP通讯,PC端的IP需要在路由映射一个端口到外网,让你的wince设备可以通过这个端口链接到你的PC端上,这样才能进行通讯
那是不是我用路由作为计算机和PDA的中间媒介,就可以实现用网络通信?[/quote] 对,你如果是直接接的网线,那么把你的wince用网线接到路由那边的话,就可以组成局域网,就可以进行网络通讯。 IP就直接使用的局域网IP
jonsenwu 2013-08-19
  • 打赏
  • 举报
回复
说明你设备网络是不通的,连接USB时能通讯主要是因为 ACTIVE SYNC 链接电脑的网络上网的,你把电脑网络关了,再看看连着USB能不能TCP通讯
91program 2013-08-19
  • 打赏
  • 举报
回复
拔掉usb后你的设备是如何上网的?

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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