JAVA TCP Socket端口的数据同步问题。

现在写一个类似FTP的文件传输服务器和客户端,服务器使用10001作为控制连接端口,10002作为数据连接端口,现在问题来了,我定义客户端使用命令getSrcFIleNa... 现在写一个类似FTP的文件传输服务器和客户端,服务器使用10001作为控制连接端口,10002作为数据连接端口,现在问题来了,我定义客户端使用命令get SrcFIleName DstFileName 的格式来请求复制文件,但是呢,我什么时候建立数据连接的Socket才好呢?是创建连接的时候直接同时创建数据连接和控制连接还是先创建数据连接等到命令过来的时候再创建数据连接呢?(我现在使用的是第一种,但是出现了下面的这个问题)
第二个问题,创建了TCP数据连接之后,由于使用了第一种的创建方式,无法保证客户端和服务器的创建流(BUfferedInputStream和BufferedOutputStream)的同步,现在我的程序总是在服务器端接受数据的时候抛出异常:Socket is closed,但是客户端没有关闭Socket只是使用了socket.shutDownOutPut()和shutDownInput(),这个错误是如何出现的
展开
 我来答
大学作业题库
2014-10-01 · 知道合伙人互联网行家
大学作业题库
知道合伙人互联网行家
采纳数:149 获赞数:180
农民出身,单身一位。书写代码过10万行,没读过书。现任利得财富资深酱油人。

向TA提问 私信TA
展开全部
。。。 你方法错了。 建议你先看看 ftp 的协议。 我简单的说下 ftp 协议。
ftp 在客户端连接上之后 ,客户端 执行get 命令 服务端返回服务端口号,客户端收到端口号 并根据端口号创建连接, 连接建立成功后 服务端 直接读取本地文件 通过数据流的方式边读边将数据 输出到 tcp 流,然后客户端就是边读数据流边写入到本地。服务端将文件读取完成之后 就close 数据流,客户端就可以 捕获到一个数据流关闭的异常,
再说 你的 问题。 socket is closed 就是 说tcp 已经关闭了。 你还说 你使用了 shutdownoutput。。。。 这不是说 socket 停止的么? 停止了 还没关闭? 已经被你的代码关闭了。!
岁生懿J
2014-09-30 · 超过30用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:50.1万
展开全部
我建议你在服务端搞个监听器,如果服务端有变化,就创建连接,传输数据.
更多追问追答
追问
那就是第二种方法咯,需要创建一个ServerSocket,但是我的服务器端是连接多个客户端的,如果这样创建,使用accept函数接受到得Socket不一定就是这个客户端发送过来的数据,需要做判定,但是如果不是的话怎样处理?木有想好
追答
你在客户端发请求的时候给个变量,比如第一个客户端发送,我给个参数1,第二个参数2,这样就可以分辨是那个客户端了,然后把数据传输给相应的客户端
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式