今天使用socket和threading 创建多线程聊天器
准备:
- 一台安装了虚拟机(VMware)的电脑(或者两台电脑( ̄︶ ̄)↗ )
- 主机和虚拟机都安装了python, 并且都有IDE
我的配置:
- win10主机,Ubuntu虚拟机
- IDE为pycharm
在创建聊天工具之前,我们需要知道主机和虚拟机的ip
对于Ubuntu,右键打开终端,输入一下命令查看ip
ifconfig
对于win, win+cmd打开终端,输入一下命令查看ip
ipconfig
我的win主机ip和虚拟机ip分别为
192.168.1.2 # win
192.168.48.142 # Ubuntu
windows上
import socket
import threading
def recv(udp_socket):
while True:
msg=udp_socket.recv(1024)
print(msg.decode('utf-8'))
def send(udp_socket,addr):
while True:
msg=input("输入:")
udp_socket.sendto(msg.encode('utf-8'),addr)
def main():
# 1. 创建套接字
udp_socket=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 绑定ip和port
udp_socket.bind(('192.168.1.2',7892))
# 3.对方的ip和port
addr=('192.168.48.142',7893)
# 4. 创建线程
t_send=threading.Thread(target=send,args=(udp_socket,addr))
t_recv=threading.Thread(target=recv,args=(udp_socket,))
t_send.start()
t_recv.start()
if __name__=='__main__':
main()
虚拟机上
import socket
import threading
def recv(udp_socket):
while True:
msg=udp_socket.recv(1024)
print(msg.decode('utf-8'))
def send(udp_socket,addr):
while True:
msg=input("输入:")
udp_socket.sendto(msg.encode('utf-8'),addr)
def main():
# 1. 创建套接字
udp_socket=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 2. 绑定ip和port
udp_socket.bind(('192.168.48.142',7893))
# 3.对方的ip和port
addr=('192.168.1.2',7892)
# 4. 创建线程
t_send=threading.Thread(target=send,args=(udp_socket,addr))
t_recv=threading.Thread(target=recv,args=(udp_socket,))
t_send.start()
t_recv.start()
if __name__=='__main__':
main()
当然,同一台电脑也可以互相通信(ip相同),只要端口不一样就好。