課程
/后端開發(fā)
/Java
/Java Socket應用---通信是這樣練成的
出現(xiàn)一個問題,服務(wù)器在循環(huán)里阻塞讀著信息,就沒出來獲取數(shù)據(jù),我兩個循環(huán)都加了break才出來的 為什么老師實現(xiàn)了???
2018-04-26
源自:Java Socket應用---通信是這樣練成的 3-4
正在回答
package?CStest;import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStream;import?java.io.InputStreamReader;import?java.io.OutputStream;import?java.io.OutputStreamWriter;import?java.io.PrintWriter;import?java.net.Socket;import?java.net.UnknownHostException;import?java.util.Scanner;public?class?ClientTest?{ public?static?void?main(String[]?args)?{ try?{ //創(chuàng)建客戶端與服務(wù)器連接,并向服務(wù)器提示已連接 Socket?socket?=?new?Socket("127.0.0.1",?8888); PrintWriter?pw=new?PrintWriter(new?OutputStreamWriter(socket.getOutputStream())); pw.write("客戶端"+socket.hashCode()+"已連接"); pw.flush(); //獲取服務(wù)器端響應信息 BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream())); String?info?=?null; new?ClientThread(socket).start(); new?ClientThreadR(socket).start(); }?catch?(Exception?e)?{ e.printStackTrace(); }? }}
package?CStest;import?java.io.BufferedReader;import?java.io.InputStreamReader;import?java.io.PrintWriter;import?java.net.Socket;public?class?ClientThread?extends?Thread?{ Socket?socket?=?null; public?ClientThread(Socket?socket)?{ this.socket?=?socket; } public?void?run()?{ BufferedReader?br?=?null; String?info?=?null; try?{ //獲取服務(wù)器信息 br?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream())); while?(true)?{ if?((info?=?br.readLine())?!=?null)?{ System.out.println(info); } } }?catch?(Exception?e)?{ e.printStackTrace(); } }}
package?CStest;import?java.io.BufferedReader;import?java.io.InputStreamReader;import?java.io.OutputStreamWriter;import?java.io.PrintWriter;import?java.net.Socket;import?java.util.Scanner;public?class?ClientThreadR?extends?Thread?{ Socket?socket?=?null; Scanner?inp=new?Scanner(System.in); public?ClientThreadR(Socket?socket)?{ this.socket?=?socket; } public?void?run()?{ //?給服務(wù)器發(fā)送信息 PrintWriter?pw?=?null; try?{ pw?=?new?PrintWriter(new?OutputStreamWriter(socket.getOutputStream()));// pw.write("客戶端"+socket.hashCode()+"已建立連接:\n");// pw.flush(); while(true)?{ System.out.println("客戶端"+socket.hashCode()+":"); pw.write(inp.nextLine()+"\n"); pw.flush(); } }?catch?(Exception?e)?{ e.printStackTrace(); } }}
package?CStest;import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStream;import?java.io.InputStreamReader;import?java.io.OutputStream;import?java.io.OutputStreamWriter;import?java.io.PrintWriter;import?java.net.ServerSocket;import?java.net.Socket;import?java.util.ArrayList;import?java.util.List;public?class?ServerTest?{ public?static?void?main(String[]?args)?{ try?{ ServerSocket?server?=?new?ServerSocket(8888); System.out.println("服務(wù)器啟動\n"); List<Socket>?list?=?new?ArrayList<Socket>(); while?(true)?{ Socket?socket?=?server.accept(); list.add(socket); //啟動線程 new?ServerThreadR(socket,list).start(); System.out.println("已連接Client"?+?socket.hashCode()+":"); } }?catch?(Exception?e)?{ e.printStackTrace(); } }}
package?CStest;import?java.io.BufferedReader;import?java.io.IOException;import?java.io.InputStreamReader;import?java.io.OutputStreamWriter;import?java.io.PrintWriter;import?java.net.Socket;import?java.util.ArrayList;import?java.util.List;public?class?ServerThreadR?extends?Thread?{ Socket?socket?=?null; List<Socket>?list?=?null; public?ServerThreadR(Socket?socket,?List<Socket>?list)?{ this.socket?=?socket; this.list?=?list; } PrintWriter?pw?=?null; public?void?run()?{ BufferedReader?br?=?null; String?info?=?null; try?{ //?客戶端登錄,服務(wù)器向客戶端發(fā)送 pw?=?new?PrintWriter(new?OutputStreamWriter(socket.getOutputStream())); pw.write("客戶端"+socket.hashCode()+"登錄\n"); pw.flush(); while?(true)?{ //?讀客戶端信息,監(jiān)聽 br?=?new?BufferedReader(new?InputStreamReader(socket.getInputStream())); if?((info?=?br.readLine())?!=?null)?{ ServerReader(info); System.out.println("Client"?+?socket.hashCode()?+?":?"?+?info); } } }?catch?(Exception?e)?{ e.printStackTrace(); } } public?void?ServerReader(String?str)?{ for?(int?i?=?0;?i?<?this.list.size();?i++)?{ PrintWriter?pw?=?null; try?{ pw?=?new?PrintWriter(this.list.get(i).getOutputStream()); pw.write(str?+?"\n"); pw.flush(); }?catch?(IOException?e)?{ e.printStackTrace(); } } }}
//粘貼的有點亂,一共五個類,客戶端和一個監(jiān)聽一個輸入兩個線程,服務(wù)端和一個監(jiān)聽,你可以試試,不會來交流下,或者粘貼不對的,可以留下郵箱
貼代碼!
舉報
分享的是 Java 中的網(wǎng)絡(luò)編程,使用Socket實現(xiàn)網(wǎng)絡(luò)聊天通信
2 回答服務(wù)器端響應客戶的報了差
4 回答socket服務(wù)器與客戶端通信問題------服務(wù)器循環(huán)接收客戶端消息
1 回答當使用UDP協(xié)議,客戶端接收服務(wù)器響應消息,沒有完全顯示出
1 回答服務(wù)器端有信息,客戶端沒信息
3 回答服務(wù)器與客服端響應一次后失效
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2018-05-03
//粘貼的有點亂,一共五個類,客戶端和一個監(jiān)聽一個輸入兩個線程,服務(wù)端和一個監(jiān)聽,你可以試試,不會來交流下,或者粘貼不對的,可以留下郵箱
2018-05-02
貼代碼!