黑马程序员技术交流社区
标题:
Socket中shutdownOutput()
[打印本页]
作者:
贾振凯
时间:
2013-3-28 22:55
标题:
Socket中shutdownOutput()
本帖最后由 贾振凯 于 2013-3-30 20:47 编辑
当调用Socket中shutdownOutput()方法是不是在关闭输出流之前会发送一个 -1 作为结束标记给对方输入流???
作者:
余勇
时间:
2013-3-29 14:01
应该没有返回,
public void shutdownOutput()
throws IOException禁用此套接字的输出流。
对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。
如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。
只关闭Socket的输入流和输出流,用以表示输入或输出数据已经发送完毕
当调用shutdownInput()或shutdownOutpu()方法关闭Socket的输入流或输出流之后,该Socket处于“半关闭”状态。
Socket可通过方法,isInputShutdown()判断Socket是否处于半读状态(read-half),
通过方法isOutputShutdown()判断该Socket是否处于半写状态(read-half),
即使同一个Socket实例先后调用shutdownInput()\shutdownOutput()方法,
该Socket实例依然没有被关闭,只是该Socket既不能输出数据,也不能读取数据而也.
作者:
VOIDMAIN
时间:
2013-3-29 17:53
楼主你的理解是对的,
作者:
王_强
时间:
2013-3-30 17:43
package com.nets;
import java.io.*;
import java.net.*;
public class PictureClient {
/**
* 上传图片
* 客户端:
* 1.服务端点
* 2.读取客户端已有的图片数据
* 3.通过Socekt输出流将数据发给服务端
* 4.读取服务端反馈信息
* 5.关闭流资源
*
*/
public static void main(String[] args) throws Exception{
Socket s=new Socket(InetAddress.getLocalHost().getHostName(),10012);
FileInputStream fis=new FileInputStream("1.jpg");
OutputStream out=s.getOutputStream();
byte[]buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
out.write(buf,0,len);
}
//告诉服务端数据已写完,相当于发送-1,不然,服务端一直在接收客户端的数据,
s.shutdownOutput();
InputStream in=s.getInputStream();
byte[]bufIn=new byte[1024];
int num=in.read(buf);
System.out.println(new String(buf,0,num));
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2