【接上一條評論】
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