首页 新闻 搜索 专区 学院

Tcp 端口通信问题

0
悬赏园豆:10 [已解决问题] 解决于 2008-09-07 15:02

我使用TcpClient在客户端和服务端建立了一个连接,两边的流也都已经打开了。如果客户端只向这个流中写入字符串或者文件,则服务器端可以处理,因为它不需要进行判断。但是如果我想客户端输入“1”发送字符串“xxx...”,输入“2”发送一张图片文件;而服务端是以流的形式接收,最后保存到了byte[]数组中,那么服务器如何知道发送的是字符串还是图片,又应该如何还原呢?

 

还是方法本身就有问题,应该在客户端开辟两个端口与服务器通信,一个命令端口,专门传输字符串;一个数据端口,专门用于传输图片?

 

谢谢!

April.的主页 April. | 初学一级 | 园豆:190
提问于:2008-09-07 09:01
< >
分享
最佳答案
0

  服务端数组使用两个,Byte[] FileType, FileDatas.

  类似张小虾说的,客户端传来的文件流保存到 Byte[] Temp 中,而与客户端约定 Temp 前16 位(或更多)存放文件类型(.jpg、.gif等),字符串时则用空或某个约定标识表示(比如_STR),服务端接收时进行类似 Temp.CopyTo(FileType, 0, 16),Temp.CopyTo(FileDatas, 16)  的处理就可以了。在需要处理的地方转换 FileType 到 FileTypeString,然后 switch(TileTypeString) 当就可以了。 

  这时看,你说的先发送 1、2 等似乎没必要了,一来功能被 Temp 的前 16 位(?)取代,二来一次文件或内容传送,分成两次发送与接收,在性能上可能不够后者好(网络开销更高?)。

陛下 | 老鸟四级 |园豆:3938 | 2008-09-07 11:09
其他回答(1)
0

客户端就把"1abcdef"通过UTF16发过去,服务器端取到流后转成byte[]再用UTF16解码前2个字节看看是不是1,是的话就把第3个字节开始的内容以字符串形式处理,如果是2就把第3个字节开始的内容以图片形式处理

一定要UTF16,不然取字节会有问题

Gray Zhang | 园豆:17610 (专家六级) | 2008-09-07 10:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册