【接上一条评论】
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
对于还在纠结端口号为-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
把老师提到的衍伸作业,多客户端传输文件和多客户端传输对象写了下,全部搞定,很有成就感,感觉对相关知识,socket通信及IO处理又巩固了很多,谢谢老师。最后的综合练习可惜我数据库部分知识还没开始学习,等学完了再回头来做作业
2016-06-22
至于为什么getPort()返回-1,去看源码就知道了,URL有一个成员变量port,初始值就是-1.如果在new实例的时候,传入了大于等于-1的端口号,则会把这个端口号值赋给成员变量port,当然,如果传入了小于-1的端口,则抛异常。就这么简单,源码就这么写的,有什么好奇怪的!
2016-06-21