socket 客户端 异步接,服务器不确定?

jjcl521 2010-06-08 01:19:10
1,设备 Nport 作为Tcp Server Mode

2,通过设备Nport连接一个读卡器

3,程序中用一个socket客户端(异步),给服务器发送一个命令,然后接收卡号

问题?

只有scoket客户端,服务器端没有发送接收代码(服务器是个设备),给服务器发送数据后,接收不到,代码如下


//困扰我一天了,麻烦高手给看看
byte [] dataSend = new byte[1024];
byte [] dataRev = new byte[1024];

IPEndPoint ipEP = new IPEndPoint(IPAddress.Parse(IP), port);
ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
dataSend = Encoding.ASCII.GetBytes("命令");

ClientSocket.Send(dataSend, 0, SocketFlags.None);

ClientSocket.BeginReceive(dataRev, 0, dataRev.Length, SocketFlags.None, new AsyncCallback(RecevieCallBack), ClientSocket);

private void RecevieCallBack(IAsyncResult Ar)
{
Socket Client = (Socket)Ar.AsyncState;
int byteend = Client.EndReceive(Ar);
if (byteend>0)
{
Client.BeginReceive(dataRev, 0, dataRev.Length, SocketFlags.None, new AsyncCallback(RecevieCallBack), ClientSocket);

}

ShowMsg(Encoding.ASCII.GetString(dataRev)+Client.RemoteEndPoint.ToString());
}





...全文
119 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
周药师 2010-06-08
  • 打赏
  • 举报
回复
用抓包工具 试试
看你发的包和demo发的包是否一致就知道了
周药师 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jiezi316 的回复:]
引用 9 楼 zhouzhangkui 的回复:
RecevieCallBack
你的这个函数干吗用了?

ClientSocket.BeginReceive(dataRev, 0, dataRev.Length, SocketFlags.None, new AsyncCallback(RecevieCallBack), ClientSocket);

BeginReceive 这个是……
[/Quote]

失误 看走眼了
以为在C++里

lz的代码看起来没有什么错误,查看一下发送的协议包是否正确
捷哥1999 2010-06-08
  • 打赏
  • 举报
回复
看看这个是怎么写的:

一个我经常参考的异步socket通信:
niaoked 2010-06-08
  • 打赏
  • 举报
回复
我也是做工控的
你最好把DEPHI发的数据和C#发的数据通过工具对比一下
有可能是C#发过去的数据设备不认识
jiezi316 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhouzhangkui 的回复:]
RecevieCallBack
你的这个函数干吗用了?

ClientSocket.BeginReceive(dataRev, 0, dataRev.Length, SocketFlags.None, new AsyncCallback(RecevieCallBack), ClientSocket);

BeginReceive 这个是阻塞的, 程序会一直卡在这里等待接收数据,
哪里调……
[/Quote]

BeginReceive 这个不阻塞哈
周药师 2010-06-08
  • 打赏
  • 举报
回复
RecevieCallBack
你的这个函数干吗用了?

ClientSocket.BeginReceive(dataRev, 0, dataRev.Length, SocketFlags.None, new AsyncCallback(RecevieCallBack), ClientSocket);

BeginReceive 这个是阻塞的, 程序会一直卡在这里等待接收数据,
哪里调用了RecevieCallBack?



jjcl521 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jiezi316 的回复:]
如果你只是想具个例子,那么很有可能你发的命令字格式或者编码不正确导致服务器不响应
[/Quote]

恩,你说的对 可能是我的命令不正确

命令是经过 stirng to bcd ,再经过 crc 校验以后的
jiezi316 2010-06-08
  • 打赏
  • 举报
回复
如果你只是想具个例子,那么很有可能你发的命令字格式或者编码不正确导致服务器不响应
redlei 2010-06-08
  • 打赏
  • 举报
回复
帮你顶一手
也学习一下。
jiezi316 2010-06-08
  • 打赏
  • 举报
回复
我知道所谓的命令是字符串!可你的代码

dataSend = Encoding.ASCII.GetBytes("命令");

ClientSocket.Send(dataSend, 0, SocketFlags.None);

你自己看你发的什么命令过去?难道不是“命令”这个字符串吗,怎么可能会有这样的命令呢?
jjcl521 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jiezi316 的回复:]
你发了个“命令”过去,可我不相信对方接受的命令字是“命令”

DELPHI的s的值是什么?
[/Quote]

所谓的 “命令”也就是一堆字符串

我刚从google一下说是串口 socket

jiezi316 2010-06-08
  • 打赏
  • 举报
回复
你发了个“命令”过去,可我不相信对方接受的命令字是“命令”

DELPHI的s的值是什么?
jjcl521 2010-06-08
  • 打赏
  • 举报
回复
人工置顶
jjcl521 2010-06-08
  • 打赏
  • 举报
回复
这个是Delphi的代码 可以实现功能

clientsocket1.Active := false;
clientsocket1.Host := sIP;
clientsocket1.Port := iPort;
bop := 10;
try //当地址或端口不存在时 引发异常,不做处理 继续执行
if not clientsocket1.Active then clientsocket1.Active := true;
except
//raise Exception.Create('目标地址或端口不可用');
end;
clientsocket1.Socket.SendText(s);
sleep(500);

setsockopt(clientsocket1.Socket.SocketHandle, SOL_SOCKET, SO_RCVTIMEO, @bop, sizeof(bop));
s2 := clientsocket1.Socket.ReceiveText;
rev := BcdTOstr(s2);

110,571

社区成员

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

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

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