網路程式設計之 使用Socket建立聊天室

2021-08-27 09:05:42 字數 2161 閱讀 7645

使用基於tcp協議的socket建立聊天室,

昨天我寫的部落格已經介紹了怎麼使用 serversocket 建立服務端,以及服務端怎麼返回資料給客戶端

昨天寫的部落格有個缺陷,就是 客戶端只能 先傳送,後讀取,對於正常情況來說應該是,客戶端讀取和傳送是互相不相干涉的兩個步驟,所以這裡就得使用到多執行緒了,為 客戶端傳送資料,和接收資料各開闢一條道路。

首先來看看客戶端的傳送訊息:

客戶端傳送訊息,得跟 socket 關聯起來,裡面則有 輸入輸出流,因為客戶端要想傳送則必須有輸出流,輸入流則是因為我們在控制台使用,使用輸入流輸入資料

那麼我們來看看 clientsend 類

/**

* 傳送資料執行緒

* @author snow

* */

public class clientsend implements runnable catch (ioexception e) }

/*** 獲取控制台輸入的資料

* @return

*/private string getmsg() catch (ioexception e)

return new string(data , 0 ,len); }

/*** 傳送訊息

*/public void send() catch (ioexception e) }

@override

public void run()

}}

接下來就是接收類:

接收類也和讀取類一樣,需要和socket 進行關聯

看看**吧:

/**

* 接收訊息

* @author snow

* */

public class clientreceive implements runnable catch (ioexception e) }

// 接收資料

public string receivemsg() catch (ioexception e)

return "";

} @override

public void run()

}}

則,客戶端,建立乙個 socket連線,然後new 兩個執行緒跑起來就可以實現 接收傳送互不干擾了

public class myclient 

}

服務端這邊,如果使用 while(true)裡面按照原來得樣子不使用執行緒寫的話,則乙個客戶端連線上了,則其他的客戶端得等待這個客戶端聊完了才能連上,很顯然這是不合常理得。

為了避免這種問題,我們服務端也得使用多執行緒。

通常多個客戶端一起聊稱之為群聊,自己傳送得訊息別人都收得到。

所以我們這裡建立乙個 server 類實現 runable,同時使用乙個 list來裝 每乙個server

看看**吧:

/**

* 服務端的 server

* @author snow

* */

public class server implements runnable catch (ioexception e) }

/*** 接收資料

* @return

*/private string recevicemsg() catch (ioexception e)

return new string(data, 0, len); }

/*** 傳送訊息

*/private void sendmsg(string data) catch (ioexception e) }

/*** 傳送給另外的客戶端訊息

*/private void sendmsgtoallclient()

server.sendmsg(msg);

} }@override

public void run() }

}

myserver 服務端類這樣寫:

public class myserver 

public void server() throws ioexception

}}

這樣,乙個 基於tcp得socket聊天室就完成啦!

網路程式設計之socket

套接字 socket 是乙個抽象層,應用程式可以通過它傳送或接收資料,可對其進行像對檔案一樣的開啟 讀寫和關閉等操作。套接字允許應用程式將i o插入到網路中,並與網路中的其他應用程式進行通訊。網路套接字是ip位址與埠的組合。套接字起源於 20 世紀 70 年代加利福尼亞大學伯克利分校版本的 unix...

網路程式設計之socket

1,socket 通訊 服務端 import socket server socket.socket server.bind 127.0.0.1,8080 server.listen 5 conn,addr server.accept data conn.recv 1024 print data c...

網路程式設計之socket

1 是什麼?socket又稱套接字,是能夠實現程序間通訊的乙個 東西 2 為什麼?socket是對tcp ip協議的乙個封裝,相當於軟體設計模式中的外觀者模式 socket作為按鈕,按鈕內部連線著tcp ip的若干個對應的協議,也其實可以簡單理解為socket內部封裝著與tcp ip參考模型中各層進...