第一个问题是,客户端与服务器端需要传递多种数据,1.字符串,2.序列化后的对象,3.文件(txt,jpg,doc等),怎么来识别,区分它们,然后用正确的方式处理流。我想到的是每次先传一个字符串,告诉服务器端接下来的流是什么类型,但又觉得这样的处理方法不太好。第一次碰到这个问题,所以想问一下,常用的处理方法是怎样?
   然后第二个问题,多个客户端之间需要即时语音交流,所以客户端还要频繁地向服务器端发送一个语音的流,那么是否需要为语音流建立一个专用的socket?这样客户端就要与服务器端维持两个socket通信。
   还望大家不吝赐教!

解决方案 »

  1.   

    第一个问题,就是如你所想的,每次传递之前,先有对本次传递消息的固定消息头信息,说明消息类型、消息长度等“元数据”。想想HTTP不也类似如此么?ContentType第二个问题,一般实时性要求高的,确实会采用不同的通道。当然如果你发送处理模块做得好,也可以共用一个通道。那么所有信息要做切片发送,比如你在传递文件的时候,要能继续保证语音通畅。但没必要,多建个连接也没啥了不起。
      

  2.   

    我还想知道消息头信息是以怎样的一种形式。我决定就用几个byte吧,几个1,0代表一种消息的类型。语音那还是再建个Socket好了
      

  3.   

    消息头的形式是由你自己定的,还不清晰么?比如说你可以定义头信息是 以\n 结束的JSON字符串,或者XML片段,类似:{type=text,size=10,sender=张三,reciver=李四}
    1234567890{type=jpg,size=12345,sender=张三,reciver=李四}
    ooooooxoxoxoxoxoxoxx...<head><type>jpg</type><size>10</size>....</head>
    1234567890那么你可以先以\n为结束标识,来进行读取,比如封装一个Scanner,然后nextLine()接着根据type的类型,是二进制流还是字符,决定用InputStream来读取还是按Reader来读取。