基於python的聊天室

2021-10-08 23:12:17 字數 4740 閱讀 4545

server用於中轉訊息,如果想要實現真實的聊天室,必須將server的ip設定為雲服務,或者公網ip

from socket import

*from select import select

defmain()

:'main 主函式'

server = socket(af_inet, sock_stream)

# 建立tcp套接字

server.setsockopt(sol_socket, so_reuseaddr,1)

# 設定埠可立即重用

addr =

'127.0.0.1'

,5555

server.bind(addr)

# 繫結位址

server.listen(

)# 監聽

# 接收函式

accept(server)

defaccept

(server)

:'accept 伺服器接受函式'

# 使用select模組的select方法實現io多路復用監聽傳輸

rlist =

[server]

wlist =

xlist =

while

true

: rs, ws, xs = select(rlist, wlist, xlist)

for r in rs:

# 伺服器接受客戶端連線

if r is server:

try:

conn, addr = server.accept(

) welcome(conn)

# 將客戶端套接字新增到rlist中以監聽

print

(, addr)

except

:pass

else

:# 伺服器接受客戶端的訊息並**給所有客戶端

try:

data = r.recv(

1024

)# **資訊給其他客戶端

data = b'\n'

+ data + b'\n'

print

(data.decode(

), end='')

for c in rlist[1:

]:if c is

not r:

c.send(data)

except

: rlist.remove(r)

defwelcome

(client)

: client.send(b'welcome! \n'

)return

true

if __name__ ==

'__main__'

:# 主函式

main(

)

import os, sys

import threading

from socket import

*from select import select

defmain()

:'main 主函式'

client = socket(af_inet, sock_stream)

# 建立tcp套接字

if login(client)

: t_recv = threading.thread(target=recv, args=

(client,))

t_send = threading.thread(target=send_msg, args=

(client,))

t_recv.start(

) t_send.start(

)def

send_msg

(client)

:while

true

: send_data =

input

("請輸入要傳送的資料:"

) send_data = username +

":"+send_data

client.send(send_data.encode(

"utf-8"))

defrecv

(client)

:# 使用select模組的select方法實現io多路復用監聽傳輸

rlist =

[client]

wlist =

xlist =

while

true

: rs, ws, xs = select(rlist, wlist, xlist)

for r in rs:

if r is client:

# 接受伺服器發來的訊息

data = client.recv(

1024

)if data.decode()==

'\n'

:# 如果訊息為回車,聊天室關閉

client.close(

) os._exit(0)

else

:# 列印接收到的資訊

print

(data.decode(

), end='')

deflogin

(client)

:'登入函式 login'

curuser =

input

('輸入名稱》'

)global username

username = curuser

addr =

'127.0.0.1'

,5555

client.connect(addr)

# 連線到伺服器位址

data = curuser +

': '

+"進入房間"

client.send(data.encode())

return

true

if __name__ ==

'__main__'

: main(

)

import os, sys

import threading

from socket import

*from select import select

defmain()

:'main 主函式'

client = socket(af_inet, sock_stream)

# 建立tcp套接字

if login(client)

: t_recv = threading.thread(target=recv, args=

(client,))

t_send = threading.thread(target=send_msg, args=

(client,))

t_recv.start(

) t_send.start(

)def

send_msg

(client)

:while

true

: send_data =

input

("請輸入要傳送的資料:"

) send_data = username +

":"+send_data

client.send(send_data.encode(

"utf-8"))

defrecv

(client)

:# 使用select模組的select方法實現io多路復用監聽傳輸

rlist =

[client]

wlist =

xlist =

while

true

: rs, ws, xs = select(rlist, wlist, xlist)

for r in rs:

if r is client:

# 接受伺服器發來的訊息

data = client.recv(

1024

)if data.decode()==

'\n'

:# 如果訊息為回車,聊天室關閉

client.close(

) os._exit(0)

else

:# 列印接收到的資訊

print

(data.decode(

), end='')

deflogin

(client)

:'登入函式 login'

curuser =

input

('輸入名稱》'

)global username

username = curuser

addr =

'127.0.0.1'

,5555

client.connect(addr)

# 連線到伺服器位址

data = curuser +

': '

+"進入房間"

client.send(data.encode())

return

true

if __name__ ==

'__main__'

: main(

)

基於UDP聊天室程式

基於udp聊天室程式使用socket程式設計實現。windows套接字在兩種模式下執行i o操作,阻塞和非阻塞。在阻塞模式下,在i o操作完成前,執行操作的winsock函式會一直等待下去 如recvfrom,wsarecvfrom函式 不會立即返回程式 將控制權交還給程式 而在非阻塞模式下,win...

基於PHP MySQL的聊天室設計

mysql併發能力強 響應速度快,是效能優異的資料庫軟體 php是功能強大的伺服器端指令碼語言。筆者在 開發中,採用 php4.0 mysql3.23.38建立了多種應用。下面,以乙個簡單的 聊天室設計為例,介紹 php mysql在網頁開發中的應用。1 總體設計 1 1 構思與規劃 聊天室的基本原...

基於PHP MySQL的聊天室設計

mysql併發能力強 響應速度快,是效能優異的資料庫軟體 php是功能強大的伺服器端指令碼語言。筆者在 開發中,採用php4.0 mysql3.23.38建立了多種應用。下面,以乙個簡單的聊天室設計為例,介紹php mysql在網頁開發中的應用。1 總體設計 1 1 構思與規劃 聊天室的基本原理,就...