簡易版聊天室-Java-socket
阿新 • • 發佈:2020-07-14
隨筆
已經有半個月沒寫文件了,到了大二,我深刻體會到了程式語言的博大精深,於是我陷入了思考,到底什麼樣算是會程式設計呢?我發現在一些Java書籍中,僅僅只是介紹了常用程式碼的使用方式,及作用,並沒有涉及底層,構造原理,不懂底層也就談不上修改,優化了,每當在寫程式碼的時候,明明一個API下有那麼多方法,我卻僅僅只認得那麼一兩個方法,很多索引出的內容都要通過記憶單詞的方式去過濾,學習知識都是照搬照抄,我真的瞭解程式設計嗎?我想我並不會程式設計,我所使用的程式設計都是遵循原有的規則去實現的,那麼這樣走下去,我想我不會是一個程式設計師,頂多算一個程式碼搬運工,深知現狀卻無能為力,感慨萬千:人生好難!
socket實現簡易聊天室
原始碼1
package demo; import java.net.*; import java.io.*; import java.util.*; public class Server { int port; List<Socket> clients; ServerSocket server; public Server() { try { port = 8083; clients = new ArrayList<Socket>(); server = new ServerSocket(port); System.out.println("伺服器已啟動"); int co=1; while (true) { Socket socket = server.accept(); clients.add(socket); Mythread mythread = new Mythread(socket,co); co++; mythread.start(); } } catch (Exception ex) { System.out.println("vv"); } } public static void main(String[] args) { new Server(); } class Mythread extends Thread { Socket ssocket; private int count; private BufferedReader br; private PrintWriter pw; public String msg; public Mythread(Socket s,int c) { ssocket = s; count=c; } public void run() { try { br = new BufferedReader(new InputStreamReader(ssocket.getInputStream())); msg = "歡迎【" +"Client "+count + "】進入聊天室!當前聊天室有【" + clients.size() + "】人"; sendMsg(); while ((msg = br.readLine()) != null) { msg = "【" +"Client "+count + "】說:" + msg; sendMsg(); } } catch (Exception ex) { } } public void sendMsg() { try { System.out.println(msg); for (int i = clients.size() - 1; i >= 0; i--) { pw = new PrintWriter(clients.get(i).getOutputStream(), true); pw.println(msg); pw.flush(); } } catch (Exception ex) { } } } }
原始碼2
package demo; import java.io.*; import java.net.*; import java.util.*; public class Client { public int port = 8083; Socket socket = null; public static void main(String[] args) { new Client(); //開始執行 } public Client() { try { socket = new Socket("127.0.0.1", port); new Cthread().start(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String msg1; while ((msg1 = br.readLine()) != null) { System.out.println(msg1); } } catch (Exception e) { } } class Cthread extends Thread { public void run() { try { BufferedReader re = new BufferedReader(new InputStreamReader(System.in)); PrintWriter pw = new PrintWriter(socket.getOutputStream(), true); String msg2; while (true) { msg2 = re.readLine(); pw.println(msg2); } } catch (Exception e) { e.printStackTrace(); } } } }
最終效果圖,當然這樣是無法實現多人線上聊天的,可以通過telnet來實現線上聊天,只不過這個聊天室是一個匿名的,基於cmd視窗。
實現多人線上聊天
1.開啟控制面板
2.找到功能和程式
3.選擇啟用或關閉Windows功能
4.開啟Windows當中的telnet功能
5.win+R--->cmd-->輸入telnet 127.0.0.1 埠號
如果讓別的電腦連線聊天室需要將本機電腦的防火牆關閉(對方電腦與本機必須處於同一區域網下,否則需要將本機電腦的ip地址對映到公網上)
可能發生的問題
無法開啟到主機的連線 埠23失敗?
可能是埠錯了,因為telnet的預設連線埠是23
格式:
telnet不僅僅能連線23埠,但是telnet預設連線是23埠
要連線其他埠,在cmd打命令
telnet 192.168.1.1 135,中間沒有“:”,是一個空格`這樣telnet就連線到了對方的135埠`