请高手帮忙,接收数据问题

fangzheng2008 2008-06-21 09:07:26

各位兄弟姐妹,我遇到困难了,我搞了好几天都没弄明白,急死我了,老板天天催啊,
问题是这样的:
在局域网内,我想在服务器端与客户端用两个端口去监听,然后分别建立连接,一个用于传输数据,另一个用于传输命令,不知到能不能实现,该怎样做啊,请大虾们指点一下,兄弟这厢有理了,
另外下面是我在服务器端程序中的一小段demo,可是为什么客户端发了的数据,这边WM_SOCKETMESSAGE不相应啊,帮解决一下,我分也不多,先这些吧,不够的话,再加,呵呵

int nport=5000;
paraSock=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_READ);

sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(nport);
addr.sin_addr.S_un.S_addr=inet_addr(ip.GetBuffer(0));
bind(paraSock,(sockaddr*)&addr,sizeof(addr));
listen(paraSock,5);
...全文
122 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iawfnusr 2008-06-27
  • 打赏
  • 举报
回复
是不是还没接收连接?
fangzheng2008 2008-06-27
  • 打赏
  • 举报
回复
问题解决了,谢谢各位帮忙啊,分不多人人有份
skinfeature 2008-06-27
  • 打赏
  • 举报
回复
现在只响应FD_ACCEPT,其他的都不响应啊,起了怪了
ssm1984119 2008-06-22
  • 打赏
  • 举报
回复
把 WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_READ); 放到listen之后看看行不?
HELLO_wallace 2008-06-22
  • 打赏
  • 举报
回复
我想在服务器端与客户端用两个端口去监听,然后分别建立连接,一个用于传输数据,另一个用于传输命令
何不自定义一个协议,包头消息定义两类:一类是数据,一类是命令,接受数据的时候直接判断包头
如果是数据则处理数据,命令则处理命令,这样只用一个端口就可以
WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_READ);
一句也就够了
蒋慧平 2008-06-22
  • 打赏
  • 举报
回复
int nport=5000;
paraSock=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_READ);

sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(nport);
addr.sin_addr.S_un.S_addr=inet_addr(ip.GetBuffer(0));
bind(paraSock,(sockaddr*)&addr,sizeof(addr));
listen(paraSock,5);

这只是个监听套接字吧。这个套接字是用来accept连接的。那就是说可以收到FD_ACCEPT而不是FD_READ
.
你需要用accept函数来接受连接,accept返回的socket才是与客户端通信的socket


sockaddr addr;
NewSocket = accept(paraSock,&addr,sizeof(soockaddr));
WSAAsyncSelect(NewSocket ,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_READ);

这样应该当数据到来时,就应该可以收到 WM_SOCKETMESSAGE了

长尾巴的悟空 2008-06-21
  • 打赏
  • 举报
回复
找公司网络强的人帮你解决一下近水问题.
fangzheng2008 2008-06-21
  • 打赏
  • 举报
回复
现在只响应FD_ACCEPT,其他的都不响应啊,起了怪了
cppwin 2008-06-21
  • 打赏
  • 举报
回复
FD_ACCEPT | FD_READ | FD_WRITE |FD_CONNECT
cppwin 2008-06-21
  • 打赏
  • 举报
回复
一个用于传输数据,另一个用于传输命令,不知到能不能实现
可以,ftp就是这样,你可以参考ftp的相关源码

WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_ACCEPT|FD_READ|FD_WRITE|FD_CONNECT)
将 FD_READ FD_WRITE FD_CONNECT都写上
fangzheng2008 2008-06-21
  • 打赏
  • 举报
回复
我跟踪了一下,连接正常啊,我若把WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_READ);换成 WSAAsyncSelect(paraSock,AfxGetMainWnd()->m_hWnd,WM_SOCKETMESSAGE,FD_ACCEPT);则客户端在连接时马上发送数据,能响应一次,下次发送时不响应
fangzheng2008 2008-06-21
  • 打赏
  • 举报
回复
啊,一楼你能详细说一下在客户端如何产生WM_SOCKETMESSAGE吗,我刚接触网络啊,谢谢啊,
CathySun118 2008-06-21
  • 打赏
  • 举报
回复
感觉没有必要用两个端口,两个端口并不能提高效率。
你应该跟踪一下,连接是否正常。
xlzxlich 2008-06-21
  • 打赏
  • 举报
回复
你还可以设置标志字段来区别是传输数据还是传输命令。

客户端没有产生WM_SOCKETMESSAGE。
cnzdgs 2008-06-21
  • 打赏
  • 举报
回复
可以用两个连接(不是监听两个端口)分别处理命令和数据,不过通常用用一个连接来处理就可以了。
监听端口时WSAAsyncSelect要用FD_ACCEPT,收到消息时调用accept接受连接。
BMP magic是一个新型的加密软件,你可以用它把任何格式的windows文件存入到一幅24位真彩色的BMP图片中,神奇的是这幅内部藏有文件的图片的尺寸、大小不变! 在接下来的文字中您会了解到关于这个新版软件的强大功能与安全算法:在5.0B版本中:★支持jpg格式! 在本版本中,新加入了对jpg格式的自动转换——如果您打开的是一幅jpg图片,程序会自动转换为bmp格式来处理,不用事先再用其它工具转换。★可以隐藏比图片自身大若干倍的文件! 您要相信自己的眼睛:一幅200K的24位BMP,利用本程序成功地将一个1474.56K=1.44兆的WPS文件隐藏于其中!而且这还不是软件创的最高记录。★通过一系列优化算法,使隐藏文件的图片画质得到最大程序的提升! 一幅图片在最大限度上隐藏外部文件后,画质依然清晰,色彩过渡仍很平滑,基本不存在色块问题。这种算法理论上还未达到极限,后续版本中还将继续改进算法使画质进一步提升。★引领数据压缩领域新潮流! 目前最先进的压缩工具对文本文件的压缩率也不过90%,然而利用本软件将图片隐藏文件后再压缩,却有望突破这一“极限”压缩率!基于此种组合压缩法,阁下的160G海量硬盘是否可以多出几十G呢?★独创的255位动态密钥加密术让数据隐藏的更安全! 传统加密法采用常量作加密密钥不少解密高手正是利用这一普遍规律分析加密算法从而成功将所谓的“安全数据”解密。本软件自这一版本起采用最前沿的“动态密钥加密算法”使被加密的数据安全性能有了一个“质”的飞跃!也就是说,即使您用同一幅图片隐藏同一个文件,每次生成的新图片内部数据绝对是不一样的!★采用多种加密方式加密数据,无须担心数据传递过程的“中介者”! 新版软件中采用六种方式加密数据: 1.日期时间锁定; 2.外部软件锁定; 3.程序版本识别; 4.机器硬件锁定; 5.操作系统识别; 6.解密口令锁定。 这六种方式可以任意组合,现分别说明如下: A.采用“日期时间”限制时,您可以输入自1985-2099年间的任何时间(精确到秒),这样数据被加密后,解密者如不是在设定的时间企图解密将得不到正确的隐藏文件; B.采用外部软件锁定时,你可以选择你机器上有的任何一个文件做为锁定用程序,对方在解密时,必要性要用同样的文件来做为密匙才能解开里面的密文(你用的是什么文件,在“图文信息”中是查看不到的!)。 C.程序版本识别,也就是说,你用某一个版本的BMP magic加密了文件后,用其它版本的BMP magic是无法解开里面的密文的,换句话说,就是我们开发的程序,没有设置“向下兼容”; D.机器硬件锁定,你可以用你机器上的任何一个驱动器作为锁定密匙,包括硬盘逻辑分区,光盘,软盘,这样,除了在你的硬件环境中,别人将无法得到正确的加密文件; E.操作员识别,你选用“操作系统识别”后,就只能在相同的操作系统下解开密文,并且,在“图文信息”中不会标识出系统类型; F.采用“用户口令”限制时,您可以输入最长255位的密码(可以是您有办法输入其中的任何字符,当然有中文啦...)。★在图片中的任何添加数据(包括添加的文件头部信息)均用不同密钥加密,如不利用本软件根本提取不到任何有用的信息!这使数据的安全保密性得以极端的提高!★图片中可以像电子邮件一样附加“发送人”、“接收人”、“主题”及留言信息,使加密后的图片交互性更强,十二分的人性化设计!...... 共享软件时代,加密软件数不胜数,相信阁下在看到上面的文字后会在选择加密软件方面有一个成熟的理念,同时我们也相信,这个最新版的软件会带给您生活与工作上的方便与惊喜!********************************************************* 在您使用本软件之前,希望事先能与阁下达成下面的协议: 1.本软件纯属利用娱乐创意编写,参与软件编写的所有人员均不会对您由于使用本软件所造成的一切后果与损失负责! 2.本软件加密技术相当先进,属于“一次性加密”,故软件作者不会接受任何人员提出的“数据抢救”询求,阁下自我保重! 3.本软件的所有流行版本严禁任何组织或个人对其进行反编及商业炒作或以作者名义营利,但欢迎在不影响版权时传播与发布! 如果用户使用本软件,就表示默认上述许可,否则销毁本软件! ********************************************************* 经测试,本软件在Window9x/Me/NT/2000/XP运行稳定并无不安全因素敬放心使用并烦劳扩充测试,谢谢! 感谢众多朋友帮忙测试软件!

18,356

社区成员

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

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