最新回答 / 心中的愤怒就像龙咆哮
感觉你的好复杂,只是我的http://www.imooc.com/article/11793还有你这部分我看不太懂,请将以下,/#是干什么用的OutputStream os=socket.getOutputStream(); PrintWriter pw=new PrintWriter(os); pw.write("111/#"+filename+"/#"+filesize); pw.flush(); socket.shutdownOutput(...
2016-06-29
【接上一条评论】
StringBuffer sb = new StringBuffer();
char[] cbuf = new char[is.available()];
int msgLen = 0;
while((msgLen = br.read(cbuf)) != 0) {
sb.append(cbuf);
}
String msg_client = sb.toString();
System.out.println("我是服务器,客户端说:"+ msg_client);
StringBuffer sb = new StringBuffer();
char[] cbuf = new char[is.available()];
int msgLen = 0;
while((msgLen = br.read(cbuf)) != 0) {
sb.append(cbuf);
}
String msg_client = sb.toString();
System.out.println("我是服务器,客户端说:"+ msg_client);
2016-06-28
章节3-2中09:40时写的
while((info = br.readLine()) != null) {
System.out.println("我是服务器,客户端说:"+ info);
}
这里用readLine()方法不好,如果单次客户端从流中接收的信息是多行的,那么会被分成多行显示。明明是一条消息,如果这样的话就变成了多行显示。比如客户端发的消息是:“a\nb\nc”,那么服务端打印出来的消息就成了:
我是服务器,客户端说:a
我是服务器,客户端说:b
我是服务器,客户端说:c
所以建议使用下面这种表示:
【接下一条评论】
while((info = br.readLine()) != null) {
System.out.println("我是服务器,客户端说:"+ info);
}
这里用readLine()方法不好,如果单次客户端从流中接收的信息是多行的,那么会被分成多行显示。明明是一条消息,如果这样的话就变成了多行显示。比如客户端发的消息是:“a\nb\nc”,那么服务端打印出来的消息就成了:
我是服务器,客户端说:a
我是服务器,客户端说:b
我是服务器,客户端说:c
所以建议使用下面这种表示:
【接下一条评论】
2016-06-28
已采纳回答 / 心and心
读取数据有很多种方法,各有各的特点比如说字节流中,InputStream是最基本的,FileInputStream用来读取文件,DataInputStream适用于读取各种类型的数据,BufferedInputStream加缓冲可以提高IO性能字符流中也有相应的类,InputStreamReader,FileReader,BufferedReader其中BufferedReader有一个方法readLine(),可以一行一行读取,这个方法其他的都没有,使用起来比较方便再看它的构造方法,需要传入Reader...
2016-06-28
对于还在纠结端口号为-1的朋友,我说两点:
1、HTTP协议在当初制定时规定,其默认端口号为80,即未申明(省略)端口号的情况下,浏览器自动为其补充上URL中缺失的“:80”部分。关于HTTP协议的其它详情,可查阅RFC 2616。
2、java.net.URL.getPort()规定,若URL的实例未申明(省略)端口号,则返回值为-1。
两件事情请区分开来。
1、HTTP协议在当初制定时规定,其默认端口号为80,即未申明(省略)端口号的情况下,浏览器自动为其补充上URL中缺失的“:80”部分。关于HTTP协议的其它详情,可查阅RFC 2616。
2、java.net.URL.getPort()规定,若URL的实例未申明(省略)端口号,则返回值为-1。
两件事情请区分开来。
2016-06-27
已采纳回答 / SoyaDokio
方法有三,下面依次道来。主菜单操作:选中目标代码 - & Bl Source - &g Surround With - &代码 Try/catch Block<...图片...>右键快捷菜单操作:选中目标代码 - &代码 单击右键 - &ift Surround With - & Bl Try/catch B...
2016-06-27
把老师提到的衍伸作业,多客户端传输文件和多客户端传输对象写了下,全部搞定,很有成就感,感觉对相关知识,socket通信及IO处理又巩固了很多,谢谢老师。最后的综合练习可惜我数据库部分知识还没开始学习,等学完了再回头来做作业
2016-06-22
最新回答 / Airly
这个类继承了线程的方法由 extends Thread 这句代码体现。他没有调用Thread 这个父类的run方法,而是重写了这个方法....而serverThread.start();是启动这个线程,这句话你就想象成方法的调用。
2016-06-21
最新回答 / SoyaDokio
检查完代码才在最后发现有报错信息..首先,代码看了一遍,应该是没有错误。然后是报错信息,我分析有两种可能:没有先启动服务端多次启动/停止过于频繁,JVM没来得及解除端口占用再说对应的解决方法先启动服务端再启动客户端有三种方案①关闭连接时线关闭服务端②每次启动更换端口③多次启动/停止之间留下一定空闲
2016-06-21
已采纳回答 / 慕粉1466417893
1. 为什么要用PrinterWriter?因为我们写程序的时候,往Socket里写数据,写的都是文本,都是字符,所以PrinterWriter用于程序员写入数据。因为PrinterWriter是包装的OutputStream,底层实现数据传输的时候,会把我们写入的字符转换成二进制数据,就是字节流,所以传输的时候都是字节流传输。2. 为什么要用InputStream接收?上面讲到了,底层传输的时候,都是字节流,所以要用InputStream读取,还要用BufferedReader转换成字符流,也是为了方便...
2016-06-21