我想把一个字符串从Client发送到Server,字符串的长度不确定,我怎么去定义Server端接受数组byte[]的大小呢?若是把字符串换成Bool,int等,该怎么办?用什么类型去接收?我想知道大家通常是怎么做的?

解决方案 »

  1.   

    从Client到server之间传送的可能是指令或数据,要定义传输协议。复杂对象序列化后发送,到服务器端反序列化。
      

  2.   

    把数组先转成object   然后再将object转为数组!
      

  3.   

    就是把int转换成byte[]和把byte[]转换回int的过程
      

  4.   

    谢谢
    那bool值也是这样吗?
      

  5.   

    tag length value
    在tag中标注value的类型,length是value的长度。
    很多基于tcp的协议都是这么编码的。
      

  6.   

    笨一点的办法,发送定长最长值,就是你看你的字符串最长会有多大就发多大,如果是字符串,后面用空格填满,过去以后trim掉,如果你的船里面含有空格在前后加上一个指示字符,比如:
    发送“  123  ”就发“AA  123  AA”收到以后去掉AA就行了。
    我就这么搞过。
      

  7.   

    你抓个浏览器访问web服务器的包看看,或者ftp客户端发给服务器的包看看,相信就知道路怎么走了。自己瞎拼凑了“解决方法”,即使貌似再“强悍”,也走不了多远的。
      

  8.   

    Tcp/IP 和 FTP什么关系,为什么我的FTPClient类里面用的还是tcp呢?
      

  9.   

    什么车啊、车站的,大家别拿楼主开玩笑了,O(∩_∩)O~    你可以这样试试,开始Server定义个定数byte[10],也就是第一个数据包是校验包,通知接下来的数据包大小、校码等,通过这个包传输数据值重新实例化byte大小,网游的一些经验可以借鉴下。
        当然,这个是为防外挂用的,Client端还要通过加密算出校正码,传给Server,告诉它我准备好了,你可以发送了,等,这样才有正式包过来。    ( ⊙ o ⊙ )!,我跑题了,到月球了。
      

  10.   

    针对你的问题:
    1.服务端要知道你客户端发过来的包结束了,双方就要约束怎么样结束,比如说http协议这种文本协议,\r\n\r\n就是结束标志。也可以是长度加后面的值,先读长度,然后根据这个长度再去读指定长度的字节流。
    2.int bool 这中类型,也可以先做好规范,这个就可以考虑上面我说的tlv,这个你可以参考下smpp协议,说得很清楚。
      

  11.   

    我做这样的程序在自己封包的时候就会把整个数据包的长度放在包头信息中.这样服务器在接收到数据后也容易解析.至于你说的数据类型什么.其实都可以放在包头信息中.要不然你数据发送到服务器上后根本就不知道是什么数据有好长.比如我我发送一个"1234",那么我会将1234转换为byte[] 然后加上长度一起来发送.这样服务器就可以解析.发送的是:0,0,0,4,0,1,49,50,51,52。其中头4个byte表示长度.后面两个byte表示类型.最后才是数据长度.
      

  12.   

    开始以为你是做通讯软件,所以告诉你定义协议的思路,后面才知道你要做FTP。OSI 网络7层中,TCP、UDP 都是在传输层的,而你的FTP是在应用层,也就是说FTP是基于TCP协议开发的一套协议,就是这个关系。之前的例子没有注意到你是否看懂,就是当我服务器接收到数据包 包头是12 34开头的,我就做一件事,接收到包头为56 78 我就做另外一件事,而这些包头就是通信中最固定的,它用来告诉接收方这个数据包是用来干什么的,这些就是事先大家“定好的”,这个就叫做协议。%>_<%!还看不懂,你改行吧。
      

  13.   

    把你要发的东西对应的原始二进制数据先base64或HexStr编码,然后后面加一个结束符比如'\n'即0x0d发出去。
    接收端缓冲收到的数据,每遇到一个'\n'就将之前缓冲的所有数据返回给上层进行相应解码即可得到原始二进制数据。
      

  14.   

    结了帖才来....
    你要是早点说"FTP是基于TCP协议开发的一套协议"我就把分全给你了.....