使用socket和threading创建多线程聊天器

今天使用socket和threading 创建多线程聊天器

准备:

  1. 一台安装了虚拟机(VMware)的电脑(或者两台电脑( ̄︶ ̄)↗ )
  2. 主机和虚拟机都安装了python, 并且都有IDE

我的配置:

  1. win10主机,Ubuntu虚拟机
  2. 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相同),只要端口不一样就好。

猜你喜欢

转载自blog.csdn.net/qq_41459262/article/details/106964019