基於UDP聊天室程式

2021-05-26 13:50:59 字數 959 閱讀 3804

基於udp聊天室程式使用socket程式設計實現。

windows套接字在兩種模式下執行i/o操作,阻塞和非阻塞。

在阻塞模式下, 在i/o操作完成前, 執行操作的winsock函式會一直等待下去(如recvfrom, wsarecvfrom函式), 不會立即返回程式(將控制權交還給程式)。

而在非阻塞模式下, winsock函式無論如何都會立即返回。

1. 阻塞模式下編寫聊天室程式。

我們可以建立乙個執行緒, 迴圈執行recvfrom函式以獲取資訊。

程式流程:

1. afxsocketinit 進行socket版本協商,(該api只能使用1.1版本的socket)

2. 初始化socket, 繫結埠  bind.

3. 建立新執行緒, 迴圈接收資料. 接收到資料後,post message, 訊息處理, 顯示。

2. wsaasyncselect()----非同步選擇函式提供了訊息機制的網路時間選擇, 當使用它登記的網路事件發生時, winsockets 應用程式相應的視窗函式將收到乙個訊息, 訊息中指示了發生的網路事件, 以及與事件相關的一些資訊。

使socket在非阻塞狀態下執行, 無需建立乙個新的執行緒去執行recvfrom函式。

程式流程:

1. wsastartup()進行版本協商, 申請2.2 版本socket.

2. 初始化socket, 繫結埠.   bind

3. int wsaasyncselect(socket s, hwnd hwnd, unsigned int nmsg, long levent);

註冊的event發生時, 系統會收到乙個nmsg訊息, 以及事件資訊。

4. 註冊nmsg的訊息相應函式, 訊息處理函式中對事件進行處理。如遇到fd_read事件時, 我們可以在訊息處理函式中執行recvfrom(wsarecvfrom)函式獲取資料。

這樣recvfrom函式就不會被阻塞(block)了.

UDP多人聊天室

多人聊天室 chat room 客戶端功能 傳送請求,獲取結果 from socket import from multiprocessing import process import sys 伺服器位址 addr 127.0.0.1 8888 接收訊息 def recv msg s while ...

聊天室程式

伺服器 include include include include include include include include define servport 8081 伺服器端口號 define bufsize 200 最大傳輸量 int main int args,char argv s...

案例 udp聊天室(四)

報一下環境 win10 pycharm python3.7 mnetassist import socket def send msg udp socket udp sockrt 形參 傳送訊息 dest ip input 請輸入對方的ip dest port int input 請輸入對方的por...