socketローカルエリアネットワークチャット実装
1896 ワード
サービス側プロセス:socketを作成し、ポートをバインドし、ポートを傍受し、クライアント接続を受信し、マルチスレッドを利用してマルチクライアント接続を実現する
クライアント・プロセス:socketを作成し、サービス・エンド・ポートに接続します.
import socket,threading
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
soc.bind(("192.168.100.112", 30000))
#
clientList = []
#
def server_target(server_socket):
while True:
content = server_socket.recv(2048).decode('utf-8')
if content is not None:
print(content)
if content=='exit':
server_socket.send(''.encode('utf-8'))
clientList.remove(server_socket)
#
for c in clientList:
c.send(content.encode('utf-8'))
if content=='exit':
server_socket.close()
break
soc.listen()
while True:
#accept ,
clientSoc,addr = soc.accept()
print(addr)
clientList.append(clientSoc)
#
threading.Thread(target=server_target, args=(clientSoc,)).start()
クライアント・プロセス:socketを作成し、サービス・エンド・ポートに接続します.
import socket,threading
done = 0
def recv_server(socket_client):
while True:
print('done=',done)
if done==1:
break
content = socket_client.recv(2048).decode('utf-8')
if content is not None:
print(content)
else:
client_socket.close()
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("192.168.100.112", 30000))
threading.Thread(target=recv_server, args=(client_socket,)).start()
while True:
line = input('')
if line is None or line == 'exit':
client_socket.send(line.encode('utf-8'))
done = 1
break
client_socket.send(line.encode('utf-8'))