一个关于socket使用语言的问题?

qsyang 2001-10-14 09:59:44
现在有一块单片机(有网口),有自己的开发语言(类似于c语言,支持tcp/ip)其提供sockets也和unix类似,现在要和pc通讯,pc要接收从单片机发上来的包并将其数据存储在数据库中,以图形界面的形式显示!请问pc端该采用什么语言,有那些函数可以实现??万分紧急,请赐教!!!!!谢谢
...全文
182 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsyang 2001-10-26
  • 打赏
  • 举报
回复
我这里用的语言和c有很大区别,根本就不兼容的,是用byte来表示字符的,不过现在我已经搞定了,谢谢caiyi9000和airhorse了,送分了!!
airhorse 2001-10-26
  • 打赏
  • 举报
回复

我只是,写了一个概念,调试要你自己啊,我不知道你用什么语言啊?
caiyi9000 2001-10-23
  • 打赏
  • 举报
回复
笨蛋,连数据类型强制转换都不知道。改成:memcpy(buff,(char*)&login,sizeof(LOGIN))
qsyang 2001-10-19
  • 打赏
  • 举报
回复
to airhorse:
我按你的做了,可程序编译后 memcpy(buff,login,sizeof(login)) 提示告警错误:“使用错误的参数2。”结果也不对。
david_163 2001-10-18
  • 打赏
  • 举报
回复
C、VC
airhorse 2001-10-18
  • 打赏
  • 举报
回复

typedef struct
{
int PacketType;
char UserName[20];
char Password[20];
}LOGIN;

这个,就是了
LOGIN login;
char buff[512];

memcpy(buff,login,sizeof(login))

sock_write(yoursocket,buff,sizeof(login)); //这个就是,你用的编程语言的sendbuff(),只是多了,一个socket 参数,看他的原形应该可以跟win socket通讯。


qsyang 2001-10-17
  • 打赏
  • 举报
回复
哈哈,没问题!!
回答后我再加分就是了!!
ysli 2001-10-17
  • 打赏
  • 举报
回复
呵呵,好玩
caiyi9000 2001-10-17
  • 打赏
  • 举报
回复
to qsyang:你有完没完?就20分,问这么多问题?先给了分,重新问!
qsyang 2001-10-16
  • 打赏
  • 举报
回复
to airhorse:
我现在用的单片机编程语言可没有sendbuff.他有个类似的函数sock_write,其定义如下:
int sock_write(void *s,byte *dp,int len);
描述:write up to len bytes from dp on socket s.this function busywaits until either the buffer is completely written or a socket error occurs.
参数: s:pointer to a socket
dp:pointer to a buffer
len:max number of bytes to write to the buffer
返回值:Number of bytes written or -1 on an error.
试问怎能发结构呢?好象不行吧

qsyang 2001-10-15
  • 打赏
  • 举报
回复
我们的新片不支持c啊,它有自己的一套类似c语言的开发环境,我也没办法啊
airhorse 2001-10-15
  • 打赏
  • 举报
回复

sendbuff 是发结构,就是你的包了,你想这么定义就这么定义啊!

结构,会定义吧!
caiyi9000 2001-10-15
  • 打赏
  • 举报
回复
to qsyang:
数据格式应该怎样封包,这就是你自己定的应用层协议了,要根据实际系统的需求和性能来定。我看别人很难帮你!
caiyi9000 2001-10-15
  • 打赏
  • 举报
回复
to qsyang:
1.面向连接的通信一定要先建立SERVER和CLIENT之间的连接
(1)单片机做SERVER,创建一个SOCKET,设置为监听模式,一直等待着连接请求。
(2)PC做CLIENT,创建一个SOCKET,发起连接,SERVER端接到连接请求后,用accept()会自
动返回一个SOCKET,此SOCKET就用来与CLIENT端进行通信。
2.CLIENT向SERVER发一个采集数据的请求命令,SERVER接到后进行数据采集,并发送给CLIENT
3.CLIENT接到采集数据后,是否需要给SERVER回应,那要看你的系统是否有此需求。象你的系
统,SERVER发送采集到的数据端肯定是要发多个包,因此SERVER发完所有包后,需要通知
CLIENT包已发完。一般有连种方式:
(1)在发送数据包之前先发个表示后续数据包长度的字段,CLEINT根据此长度读数据,在读
完此长度的数据后,就认为数据包发完了。
(2)SERVER发送所有数据包后,再给CLIENT发一条数据包发送完毕指示消息。
这实际上就是你在TCP/IP基础上自己又封装了一层自己的应用层协议,完全符合网络7层协议
的原则。
4.CLIENT发采集数据请求给SERVER端时,一般做个超时处理,如果超过一定时间仍为收到SERVER的响应,那就重发一次,或做相应的失败处理。
5.如果SERVER回传数据时,CLIENT没收到,那SERVER就没接到CLIENT的回应,同样SERVER也要做超时处理,超时后就再给CLIENT发一次数据,或做失败处理。
qsyang 2001-10-15
  • 打赏
  • 举报
回复
to 至尊宝
不用sendtext。
现在就是要采集单片机上90多个变量(按位来传输应该更少),然后以包的格式传给pc,不知怎么做好呢?应该怎样封包呢?
qsyang 2001-10-15
  • 打赏
  • 举报
回复
to caiyi9000:
首先谢谢你的解释。我还有个问题。
现在pc端是client,而单片机是server。server端监听和发数据工作。pc端按时(比如5分钟)做收集数据工作。
我们老板说要实现过程如下:
1:pc发包给server告之要采集数据。
2:建立连接,收发数据。
3: pc发确认包给server。

请问以上对吗?我认为第三条好像没有必要啊,应该是tcp/ip的三次握手自动完成的吧?那么pc端怎么能够确认包已经全部收到了呢?

还有,如果开始pc发包给server,而server没有响应(有可能是网络忙或者是链路断掉),那么pc端该怎么处理?或者server回传数据时pc没有收到,那么该怎么处理呢?
airhorse 2001-10-15
  • 打赏
  • 举报
回复

可象delphi等都是封装了底层机制阿,根本看不到底层,怎么办?
因为包的格式都是自己定的,所以好像不能直接用控件,那么怎样收发包(自己定义)呢?

谁说,delphi 不支持 winsock底层机制的。他的Tserversocket, tclientsocket就是由
winsock写的,跟vc的一样用。

即使用控件也,一样可以实现。通讯时要用sendbuff就可以了。

你设计的通讯,不会用sendtext吧!(不能这么做的)。sendstream设计的话,兼容性不好!
caiyi9000 2001-10-15
  • 打赏
  • 举报
回复
你在PC机上在VC环境下做一个MFC机制的应用程序,数据库用SQL做,通过ODBC与应用程序连接。然后在此应用程序中加入网络通信的功能,用winsock API实现。单片机发出的数据流格式,你自己协议中肯定有定义,发到PC的网络缓冲区后,你的VC应用程序,从网络缓冲区中读出数据流读出并转换成你需要显示的格式,存到数据库中。winsock API中的recv()函数其实就是从网络缓冲区中读出一段字节流。
如果你是面向连接传输数据的话,单片机侧创建一个SERVER SOCKET,并设置为监听模式。PC机端创建一个SOCKET并发出连接请求。单片机侧用接受连接后,返回一个新的socket用于后续与PC机上的应用程序通信。
PC机做为客户端的步骤为:
WSAStartup(...); //初始化网络协议
SOCKET ClientSocket = socket(...); //创建一个客户端SOCKET
bind(ClientSocket,...); //绑定地址
WSAAsyncSelect(...); //注册网络异步事件(只限于windows下)
connect(ClientSocket,...); //向单片机侧(服务器端)发出连接请求
这样你的PC机应用程序就通过ClientSocket与单片机应用程序连上。

以下是接收和发送数据的函数,具体用法自己查VC帮助。
recv(ClientSocket, ...); //读取网络缓冲区中的数据
send(CleintSocket, ...); //向网络缓冲区发送数据
tianfang 2001-10-14
  • 打赏
  • 举报
回复
PC上用什么操作系统?
shy007 2001-10-14
  • 打赏
  • 举报
回复
用c吧,调用SOCKET方便,显示可以用vc,数据库用odbc。
加载更多回复(4)

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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