WINDOWS程序和UNIX程序通讯问题,各位帮忙了

coolsong 2003-09-13 10:49:20
小弟在做一个WINDOWS程序,这个程序要和银行的UNIX程序通讯,通过TCP协议,我的程序向银行的程序发送数据包,连接可以正常建立,可是银行的UNIX程序就是收不到我的数据包,我跟踪发现我的程序的确把数据包发出去了,我又写了一个WINDOWS测试程序,可以收到开始写的程序发送的数据包。以前在银行也遇到过这种事情,当时解决的办法是在SOCKET初始化的时候指定SOCKET的版本为1.1就解决了,可是这一次换了不同的版本也不行,不知各位老大有没有遇到过这种问题,也不知道是不是UINX和WINDOWS的通讯有没有说法,请各位老大帮忙了,谢谢
...全文
51 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt01 2003-09-15
  • 打赏
  • 举报
回复
查一下程序吧,应该是上层程序的问题
diwaa 2003-09-15
  • 打赏
  • 举报
回复
把代码贴一部分出来研究一下。
肯定是代码有问题,
因为可以建立链接。
grey_whp 2003-09-15
  • 打赏
  • 举报
回复
to: mfc168(闶阆)
9494,就是这个问题困扰了1个多星期,double和long在传输时是要重新排序的,但是这个问题不是楼主的问题啊,他的是干脆接不到,偶现在就是写bank通讯的,windows用socket1.1,java现在还没有发现类似的需要重新排序的问题.
建议楼主重新按照1.1写一个小模型试试,有时候vc编译器真的是很扯淡的!!
mfc168 2003-09-15
  • 打赏
  • 举报
回复
我做过类似的程序,在通信的时候,建立的SOCKET,是通用标准的,不管是哪个版本,在形成通信结构的时候,是统一标准的!
确实存在字节序的问题,但是不会是收不到,只能是收到后,字节序改变,内容改变而已,我们曾经做过的是double、long 类型的需要自己重新排列!
唯一可能出现的问题是:服务器端接收程序有错误,你可以在服务器端查看是否有端口再向服务器发数据包的命令,好象是iostat或者类似的命令(很久没用了,都忘记了),你可以找一下,是否已经发到服务器了!
redby 2003-09-15
  • 打赏
  • 举报
回复
呵呵,上次我同事写程序也遇到了这样的问题,后来我看了看程序,他的VC程序用的CArchive来传输数据,所以出现了类似于你的问题。
不知道你的情况
philis 2003-09-14
  • 打赏
  • 举报
回复
同意楼上的。
shanjicn 2003-09-14
  • 打赏
  • 举报
回复
Hewwatt(Hewwatt)说得有些道理,很可能使这个问题!!!
继续关注!!!
Hewwatt 2003-09-14
  • 打赏
  • 举报
回复
字节序同winsock版本没什么关系。
不管是用什么写网络程序都需要考虑字节序。
vagabondkq 2003-09-14
  • 打赏
  • 举报
回复
楼上说的也有可能,可能是网络和主机字节序的问题。
要不如果不用winsock2的东西应该不会有这样的问题吧。
Hewwatt 2003-09-14
  • 打赏
  • 举报
回复

关注一下字节序,即Big-Endian及Little-Endian的区别。

网络上数据传递是按Big-Endian即高位在前的规格传递
类似整型这种多字节数据的。
而运行的机器平台有些可能采用前者,有些采用后者。
为此,编写网络程序时,有必要对某些数据进行由主机
格式到网络格式或者相反方向的转换。可以看手册中关于
下述四个函数(或更多)的解释:
htons: convert short from host to network byte-order
ntohs: convert short form network to host byte-order
htonl: convert long from host to network byte-order
ntohl: convert long from network to host byte-order

我想由于PC大多基于Intel的,是低位在前,而大多数UNIX
系统所运行的平台都是高位在前的,这时当你在两台机器之间
传递一个整型数据时,就会由于你没有在你的程序中进行数据
格式转换,而导致UNIX机所收到的数据乱序,对方的程序很可
能将这个数据包认为是网络噪声,而简单丢弃。但是在两台
PC上运行你自已的程序时就不存在这种问题了。


如果真是这样,应该归属于SOCKET编程FAQ了。
neptunez 2003-09-14
  • 打赏
  • 举报
回复
是哦,unix用的机器和奔腾之类的字节序是不一样的
neptunez 2003-09-14
  • 打赏
  • 举报
回复
我们公司好像也遇到过,产品已经做出来了,也可以用,结果后来客户说有一个机器能运行,另外一个机器能连接上,但是传不到数据,真是奇怪。不过都是windows下,应该不是你的版本不同的问题。
dawndu 2003-09-13
  • 打赏
  • 举报
回复
个人觉得还是用1.1吧,少用windows扩展的那些。就是只用berkley socket,我这儿就是这么用的,通信很正常!关注此贴!
希望楼主早日解决!

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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