找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3155|回复: 0
打印 上一主题 下一主题
收起左侧

Socket(java写server,VC写client)遇到的问题

[复制链接]
跳转到指定楼层
楼主
ID:51269 发表于 2014-11-10 22:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   这几天公司要个用java写server、vc写client的socket。但在这之前,我不但不会java,就连socket为何物,也没听过。
  第一个java的问题,好在上周装了一个eclipse,也下了本java学习的书籍,但只是花了半天的时间浏览了前三章,就丢开了。而第二个问题,倒好像比较容易解决——Google、baidu、java帮助、vc的MSDN,随你查。
  据说高手写程序都是看协议写程序的,虽说I不是高手,但估计第一步还是省不了的,然而第二步就不是直接写程序了,我是找程序。网上找,一大把。但大略对比一下,也就两种,不知当初是哪位老兄写的,也不晓得传了几代。而且都是java一套,vc一套,用java写server、vc写client的几乎没有。即使有,也不知是哪位老兄在前面几位java、vc老兄基础上,java截一段vc截一段,真是聪明。
  不管它,拿来看看,发现了几个值得注意的问题:
  1、本地IP代号是“localhost”或“127.0.0.1”;
  2、addrSrv.sin_port=htons(6000)中htons将主机的无符号长整形数转换成网络字节顺序,很多说连接不了的,都是因为没有htons转换的原因,不过我没遇到。
  3、socket的建立模式差不多,这里列出VC的程序过程:
     server:创建一个socket——blind绑定socket到端口——监听listen——accept接受某个client的连接请求——recv/send
     client:创建一个socket——connect——recv/send.
  4、不管java or vc,if the server/client already recv,you mush send 在另一头,否则,recv这里,将定格在recv语句中,跳不下去。也就是说一收必要一发,多少个revc就多少个send。由于对java的调试不熟悉,这里可是花了我不少时间才发现的。
    注意完这些,终于实现vc和vc,java和java的通信,但关键问题还是不行——实现java的server和vc的client的通讯。网上找,倒不少人遇到这个问题,但在解决方法方面,众说纷纭,这里就花了半天,累的要死。不过总算OK.
    原来java的BufferedReader.ReadLind()是以'\n'或'\r'结束的,开始我也注意到了这个问题,所以就在vc的程序里加了一个“\n\r”,结果不行。原因是“\n\r”会被他当成两行,呵呵,真晕。所以只要加一个“\n”就行了。

  后来才知道,造成这些问题的根本原因是:阻塞和不阻塞的问题 !由于我的程序是阻塞型socket,所以才会造成第四点跳不下去的后果了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表