当前位置:脚本大全 > > 正文

聊天室python小程序(用Python写一个模拟qq聊天小程序的代码实例)

时间:2022-01-14 02:26:36类别:脚本大全

聊天室python小程序

用Python写一个模拟qq聊天小程序的代码实例

Python 超简单的聊天程序

客户端:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • import socket, sys
  • host = '10.248.27.23'
  • # host = raw_input("Plz imput destination IP:")
  • # data = raw_input("Plz imput what you want to submit:")
  • port = 51423
  • s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  • try:
  •   s.connect((host, port))
  • except socket.gaierror, e:
  •   print "Address-related error connecting to server: %s" %e
  •   sys.exit(1)
  • except socket.error, e:
  •   print "Connection error: %s" %e
  •   sys.exit(1)
  • while 1:
  •   try:
  •     data = raw_input("I say: ")
  •     s.send(data)
  •     buf = s.recv(1024)
  •     if len(buf):
  •       print "he say: "+buf
  •   except:
  •     print "Dialogue Over"
  •     s.close()
  •     sys.exit(0)
  • 服务器:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • import socket, traceback, sys
  • host = ''
  • port = 51423
  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  • s.bind((host, port))
  • s.listen(1)
  • ClientSock, ClientAddr = s.accept()
  • while 1:
  •   try:
  •     buf = ClientSock.recv(1024)
  •     if len(buf):
  •       print "he say: "+buf
  •     data = raw_input("I say: ")
  •     ClientSock.sendall(data)
  •   except:
  •     print "Dialogue Over"
  •     ClientSock.close()
  •     sys.exit(0)
  • 模拟qq聊天,语言环境:Python3

    示例代码:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • # 编写一个程序,模拟qq聊天
  • # 要求:程序可以同时发消息和收消息,发和收的过程中程序不退出
  • # 思路:使用socket来完成(socket 是全双工模式,可以实现收和发同时进行),定义俩个线程,一个负责发消息、一个负责收消息
  • from threading import Thread
  • from socket import *
  • def rec_data():
  •   while True:
  •     rec_info = udpsocket.recvfrom(1024)
  •     print("\r>>%s:%s" % (rec_info[1], rec_info[0].decode("gb2312")))
  •     print("<<", end="")
  • def send_date():
  •   while True:
  •     send_mes = input("<<")
  •     udpsocket.sendto(send_mes.encode("gb2312"), (desip, desport))
  • udpsocket = None
  • desip = ""
  • desport = 0
  • def main():
  •   global udpsocket
  •   global desip
  •   global desport
  •   desip = input("对方IP:")
  •   desport = int(input("对方端口:"))
  •   udpsocket = socket(AF_INET, SOCK_DGRAM)
  •   udpsocket.bind(("", 9001))
  •   tr = Thread(target=rec_data)
  •   ts = Thread(target=send_date)
  •   tr.start()
  •   ts.start()
  •   tr.join()
  •   ts.join()
  • if __name__ == '__main__':
  •   main()
  • 总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接

    原文链接:https://blog.csdn.net/wdz306ling/article/details/86623436

    上一篇下一篇

    猜您喜欢

    热门推荐