CE usb同步 PC SOCKET 通讯

lfqsy 2010-12-10 11:56:40
PDA和PC同步上了以后,PC给PDA发SOCKET消息。但是我找了很多都无法正常调试,急啊
...全文
318 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2011-01-05
  • 打赏
  • 举报
回复
你是用的是usb连接,你需要使用api了
lfqsy 2010-12-22
  • 打赏
  • 举报
回复
高手来点见解呀
lfqsy 2010-12-17
  • 打赏
  • 举报
回复
貌似都没有好点的结果,哎
lfqsy 2010-12-16
  • 打赏
  • 举报
回复
就是我们平常用的Activesync同步,PDA和PC 同步了,PC就给PDA发一个消息,PDA接收到了这个消息就来处理,不知道如何通信的
zyh1116 2010-12-16
  • 打赏
  • 举报
回复
个人的一点猜测,
Activesync和PDA同步时使用的是CE的API调用吧,而且Activesync在PDA端也有相应的命令解释才会在PPC调用相应的命令执行,
你要是发送消息的话,需要模拟Activesync的信息格式来发送指令吧,
仅仅个人猜测
  • 打赏
  • 举报
回复
也有可能在手机里里边装一个程序,它通过蓝牙或者红外,以自定义协议方式跟网络中服务设备通讯。等等


“PDA和PC同步上了以后,PC给PDA发SOCKET消息”我不知道你说的这两个东西有何关联?!
  • 打赏
  • 举报
回复
“同步”有很多种。比如mobile的是采用串口方式,把usb作为COM1或者COM2来用,然后微软的客户端程序通过串口(驱动层转usb)方式跟手机通讯,协议是自定义的。
  • 打赏
  • 举报
回复
什么链接就socket呀?socket成了万金油了。

你如何确信可以使用socket?
lfqsy 2010-12-14
  • 打赏
  • 举报
回复
USB线连接呀,同步的
mjp1234airen4385 2010-12-13
  • 打赏
  • 举报
回复
你的PDA和PC是怎么连接的?
如果是同在一个局域网之内,是肯定可以的。
如果是直接连接在usb口的,那就要专用的api函数了。
三岁、就很帅 2010-12-10
  • 打赏
  • 举报
回复
lfqsy 2010-12-10
  • 打赏
  • 举报
回复
PC ping PDA 这个地址根本不同,如何弄呢
lfqsy 2010-12-10
  • 打赏
  • 举报
回复
不行,CSocket.Connect(new IPEndPoint(ipaddr, Port));连接不上
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 192.168.55.101:8020
PDA段监听获得IP我觉得是错误的,我从PC断写IP,端口号发送文件连接出问题
lfqsy 2010-12-10
  • 打赏
  • 举报
回复
试看,结果怎么样
mjp1234airen4385 2010-12-10
  • 打赏
  • 举报
回复
PC上的客户端:

public class Client
{
private string StrIPAddr = "";
private int Port = 8999;
Socket CSocket = null;
private string StrRecNO = "";
public bool Success = false;
Thread TSendLetter = null;

public Client(string StrIP, int iListenPort, string StrExecResult)
{
StrIPAddr = StrIP;
Port = iListenPort;
StrRecNO = StrExecResult;
}

public void Execute()
{
//TSendLetter = new Thread(new ThreadStart(SendLetterThread));
//TSendLetter.Start();
SendLetterThread();
}

private void SendLetterThread()
{
string StrData = "";

if (CSocket != null)
{
CSocket.Close();
CSocket = null;
}

CSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipaddr = IPAddress.Parse(StrIPAddr);
try
{
CSocket.Connect(new IPEndPoint(ipaddr, Port));
if (!CSocket.Connected)
{
//10秒超时
long startticks = DateTime.Now.Ticks;

while (DateTime.Now.AddSeconds(-10).Ticks < startticks)
{
if (CSocket.Connected) break;
}
}

if (!CSocket.Connected)
{
CSocket.Close();
CSocket = null;
PubVar.StrLastError += "不能连接到地址" + StrIPAddr + "\r\n";
return;
}

StrData = "<--RecNO-->" + StrRecNO + "<--End-->";
CSocket.Send(Encoding.Default.GetBytes(StrData));
}
catch (Exception Ex)
{
PubVar.StrLastError += "Send " + StrData + " 时发生错误: " + Ex.Message + "\r\n";
}
}

public void Dispose()
{
if (CSocket != null)
{
CSocket.Close();
CSocket = null;
}

if (TSendLetter != null)
{
TSendLetter.Abort();
TSendLetter = null;
}
}
}


PC端调用:

Client client = new Client(StrIP, iPort, StrRecNO);
client.Execute();
client.Dispose();
mjp1234airen4385 2010-12-10
  • 打赏
  • 举报
回复
这个是可以的。我以前的程序里有做过的。

public class TCPServer
{
private string FIPAddr = "";
private int FPort = 8991;
private Socket SServer = null;
private IPEndPoint IPInfor = null;
private ManualResetEvent allDone = new ManualResetEvent(false);
private Thread thread = null;
private string FState = "";

public TCPServer() { }

public string IPAddr
{
get { return FIPAddr; }
set { FIPAddr = value; }
}
public int Port
{
get { return FPort; }
set { FPort = value; }
}
public string State
{
get { return FState; }
set { FState += value; }
}
private void StartListening()
{
IPAddress ipaddr = null;
if (IPAddr == "")
ipaddr = IPAddress.Any;
else
ipaddr = IPAddress.Parse(IPAddr);

IPInfor = new IPEndPoint(ipaddr, Port);
SServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
SServer.Bind(IPInfor);
SServer.Listen(50);

try
{
while (true)
{
allDone.Reset();
SServer.BeginAccept(new AsyncCallback(AcceptCallback), SServer);
allDone.WaitOne();
}
}
catch { }
}
public void Listening()
{
thread = new Thread(new ThreadStart(StartListening));
thread.Name = "TCPServer.Listening";
thread.Start();
}
static void GetNewMessage(string StrRecNO)
{
try
{
string StrSQL;
StrSQL = "SELECT WORKER.NAME WORKERNAME, REGISTER.NAME, REGISTER.IDNO, REGISTER.COMPANY, "
+ "(SELECT NAME FROM REASON WHERE REASON.RECNO = VISITINFOR.REASON) AS REASON, "
+ "VISITINFOR.RECEIVE, REGISTER.PICTURE "
+ "FROM (REGISTER LEFT JOIN VISITINFOR "
+ "ON REGISTER.RECNO = VISITINFOR.RECNO) "
+ "LEFT JOIN WORKER "
+ "ON WORKER.RECNO = VISITINFOR.WORKER "
+ "WHERE REGISTER.RECNO = '" + StrRecNO + "'";

XmlNode XmlResult = Common.ComService.GetInfor("SkyHorse", "SkyHorse", StrSQL);
MemoryStream MSData = new MemoryStream();
XmlTextWriter XW = new XmlTextWriter(MSData, Encoding.UTF8);
XmlResult.WriteTo(XW);
XW.Flush();
MSData.Position = 0;
DataSet DS = new DataSet();
DS.ReadXml(MSData);
XW.Close();
if (DS.Tables.Count > 0 && DS.Tables[0].TableName != "ReturnResult")
{
VisitTips visittips = new VisitTips(DS);
visittips.ShowDialog();
visittips.Dispose();
visittips = null;
}
DS.Dispose();
MSData.Close();
}
catch
{
// MessageBox.Show("GetMessage","提示");
}
StrRecNO = "";
}
private void AcceptCallback(IAsyncResult ar)
{
Socket listener = null;
Socket handler = null;
try
{
allDone.Set();
listener = (Socket)ar.AsyncState;
handler = listener.EndAccept(ar);
//State = "==>>地址 " + ((IPEndPoint)handler.RemoteEndPoint).Address.ToString() + " 连接\r\n";
StateObject state = new StateObject();
state.workSocket = handler;

byte[] getprtbuff = new byte[1024];
int recvlen = 0, availen = 0;
int TimeOut = 0;
while (true)
{
if (TimeOut < 10)
{
PubFunc.Sleep(500);
TimeOut++;
}
else break;
availen = handler.Available;
if (availen > 0)
{
recvlen = handler.Receive(getprtbuff);

if (recvlen > 0)
{
//Do something
string StrFileName = Encoding.Default.GetString(getprtbuff, 0, availen);
string StrSign = "<--RecNO-->";
string StrRecNO = "";
int iPos;
iPos = StrFileName.IndexOf(StrSign);
if (iPos == 0)
{
StrSign = "<--End-->";
iPos = StrFileName.IndexOf(StrSign);
if (iPos < 0)
{
StrRecNO = "";
return;
}
StrRecNO = PubFunc.Copy(StrFileName, 11, iPos - 11);
GetNewMessage(StrRecNO);
break;
}
}
}
}
}
catch { }
if (handler != null)
{
handler.Close();
handler = null;
}
}
public void Abort()
{
if (thread != null)
{
SServer.Close();
SServer = null;
thread.Abort();
thread = null;
}
}
}
public class StateObject
{
/**/
/// <summary>
/// 构造
/// </summary>
/// <param name="bufferSize">缓存</param>
/// <param name="WorkSocket">工作的插座</param>
public StateObject()
{

}
/**/
/// <summary>
/// 缓存
/// </summary>
public byte[] buffer = null; /**/
/// <summary>
/// 工作插座
/// </summary>
public Socket workSocket = null;
/**/
/// <summary>
/// 数据流
/// </summary>
public Stream Datastream = new MemoryStream();
/**/
/// <summary>
/// 剩余大小
/// </summary>
public long residualSize = 0;
/**/
/// <summary>
/// 数据包大小
/// </summary>
public long packSize = 0;
/**/
/// <summary>
/// 计数器
/// </summary>
public int Cortrol = 0;
}


CE上的服务端调用

tcpserver = new TCPServer();
IPHostEntry hostInfo = Dns.GetHostEntry(Dns.GetHostName());
LocalAddr = hostInfo.AddressList[0].ToString();
tcpserver.IPAddr = LocalAddr;
tcpserver.Port = int.Parse(LocalPort);
tcpserver.Listening();
lfqsy 2010-12-10
  • 打赏
  • 举报
回复
都没人啊,自己先来下

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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