3 聊天室

1. 运行现象

    

 

2.程序

  1)版本1:大框架

#1.导入模块

#2.创建socket套接字

#3.接受ip地址,和数据

#4.提取解码打印数据

 

  2)版本2:一次接受数据

#1.导入模块
from socket import *

#2.创建socket套接字
udp_socket = socket(AF_INET,SOCK_DGRAM)

#绑定接受方端口
udp_socket.bind(("",7790))

#3.接受ip地址,和数据
recv_data = udp_socket.recvfrom(1024)

#4.提取解码打印数据
print(recv_data[0].decode("gb2312"))

 

         

 

  2)版本3:优化代码

#1.导入模块
from socket import *

#2.创建socket套接字
udp_socket = socket(AF_INET,SOCK_DGRAM)

#绑定接受方端口
udp_socket.bind(("",7790))

#3.接受ip地址,和数据
recv_data = udp_socket.recvfrom(1024)

#4.提取解码打印数据
print(recv_data[1])
print(recv_data[0].decode("gb2312"))

 

           

 

       

      

 

#1.导入模块
from socket import *
import time

#2.创建socket套接字
udp_socket = socket(AF_INET,SOCK_DGRAM)

#绑定接受方端口
udp_socket.bind(("",7790))

#3.接受ip地址,和数据
recv_data = udp_socket.recvfrom(1024)

#4.提取解码打印数据
name = recv_data[1]
data = recv_data[0].decode("gb2312")
name = recv_data[1][0]
now_time = "[" + time.ctime() + "] "

data = now_time + name + ": " + data
print(data)

 

       

      

 

 

  3)版本3:while True

#1.导入模块
from socket import *
import time

while True:
    #2.创建socket套接字
    udp_socket = socket(AF_INET,SOCK_DGRAM)

    #绑定接受方端口
    udp_socket.bind(("",7791))

    #3.接受ip地址,和数据
    recv_data = udp_socket.recvfrom(1024)

    #4.提取解码打印数据
    name = recv_data[1]
    data = recv_data[0].decode("gb2312")
    name = recv_data[1][0]
    now_time = "[" + time.ctime() + "] "

    data = now_time + name + ": " + data
    print(data)

 

       

 

      

 

  4)版本4:多窗口聊天

    

#1.导入模块
from socket import *
import time

while True:
    #2.创建socket套接字
    udp_socket = socket(AF_INET,SOCK_DGRAM)

    #绑定接受方端口
    udp_socket.bind(("",7792))

    #3.接受ip地址,和数据
    recv_data = udp_socket.recvfrom(1024)

    #4.提取解码打印数据
    name = recv_data[1]
    data = recv_data[0].decode("gb2312")
    name = recv_data[1][0]
    now_time = "[" + time.ctime() + "] "

    data = now_time + name + ": " + data
    print(data)

 

 

 

 

  问题1:为什么每次都要换端口进行监听??while True错误

Traceback (most recent call last):
  File "04-多窗口聊天.py", line 10, in <module>
    udp_socket.bind(("",7791))
OSError: [Errno 98] Address already in use

 

  问题2:while Ture位置?

  • 最少的,需要重复运行的代码添加while True
  • 1个端口号只能用来标记1个进程,只能绑定1次,

 

  问题3:函数封装

  • 代码记得要用函数封装起来

 

3 老师代码

 

from socket import *

def main():

    updSocket = socket(AF_INET, SOCK_DGRAM)
    #绑定端口,只能绑定1次
    updSocket.bind(("",6789))

    while True:
        #核心:收数据,打印
        recvInfor = updSocket.recvfrom(1024)
        print("[%s]:%s"%(str(recvInfor[1]),recvInfor[0].decode("gb2312")))

if __name__ == "__main__":
    main()

 

       

 

posted @ 2017-12-04 16:20  venicid  阅读(189)  评论(0编辑  收藏  举报