socket聊天室

  1 #服务端
  2 from socket import *
  3 import json
  4 def recvMsg(s):
  5     while True:
  6         #接收用户的信息
  7         data,address = s.recvfrom(1024)
  8         data = json.loads(data)
  9         print(data,address)
 10
 11         if data[‘type‘] == ‘enter‘:
 12             # 将用户进入聊天室的信息发给其它所有在线用户
 13             sendToAll((‘>>系统:%s进入了聊天室‘%data[‘content‘]).encode(‘utf-8‘),s,address)
 14             #将用户信息加入users字典
 15             if address not in users:users[address]=data[‘content‘]
 16         elif data[‘type‘] == ‘quit‘:
 17             # 将用户离开聊天室的信息发给其它所有在线用户
 18             sendToAll((‘>>系统:%s离开了聊天室‘ % data[‘content‘]).encode(‘utf-8‘), s, address)
 19             # 将退出的用户从users中删除
 20             users.pop(address)
 21
 22         elif data[‘type‘] == ‘msg‘:
 23             sendToAll((‘>>%s:%s‘%(users[address],data[‘content‘])).encode(‘utf-8‘),s,address)
 24
 25         else:
 26             for i in users:
 27                 if users[i] == data[‘name‘]:
 28                     s.sendto((‘>>%s私信你说:%s‘%(users[address],data[‘content‘])).encode(‘utf-8‘),i)
 29
 30 def sendToAll(msg,s,address):
 31     for addr in users:
 32         if addr != address:
 33             s.sendto(msg,addr)
 34
 35
 36 def main():
 37     #创建socket
 38     s = socket(AF_INET,SOCK_DGRAM)
 39     #绑定服务器ip和端口
 40     s.bind((‘172.16.11.199‘,8888))
 41     #接收用户的信息
 42     recvMsg(s)
 43     #发送信息给用户
 44 if __name__ == ‘__main__‘:
 45     #设置一个全局的变量,保存所有进入聊天室的用户信息{‘地址‘:‘昵称‘,‘地址‘:‘昵称‘,....}
 46     users = {}
 47     # print(users)
 48     main()
 49
 50
 51
 52 #客户端
 53 from socket import *
 54 import json
 55 from threading import Thread
 56 def sendMsg(c,server):
 57     while True:
 58         msg = input("").strip()
 59         #发送消息
 60         if not msg:
 61             continue
 62         elif msg.lower() == ‘quit‘:
 63             # 发送进入聊天室的信息
 64             msg = {‘type‘: ‘quit‘, ‘content‘: username}
 65             c.sendto(json.dumps(msg).encode(‘utf-8‘), server)
 66             break
 67         #私聊
 68         elif msg.startswith(‘@‘):
 69             name = str(msg[1:])
 70             msg2 = input(‘>>请输入你要对他说的话: ‘).strip()
 71             msg3 = {‘type‘:‘msg2‘,‘content‘:msg2,‘name‘:name}
 72             print(">>我对%s说: %s"%(name ,msg2))
 73             c.sendto(json.dumps(msg3).encode(‘utf-8‘),server)
 74         else:
 75             #正常信息
 76             msg1 = {‘type‘:‘msg‘,‘content‘:msg}
 77             print(">>我说:%s"%msg)
 78             c.sendto(json.dumps(msg1).encode(‘utf-8‘), server)
 79
 80 def recvMsg(c):
 81     while True:
 82         data,address = c.recvfrom(1024)
 83         #打印出接收到的消息
 84         print(data.decode(‘utf-8‘))
 85
 86 def main():
 87     c = socket(AF_INET,SOCK_DGRAM)
 88     #服务器的地址
 89     server = (‘172.16.11.199‘,8888)
 90     #发送进入聊天室的信息
 91     msg = {‘type‘:‘enter‘,‘content‘:username}
 92     c.sendto(json.dumps(msg).encode(‘utf-8‘),server)
 93     #用户发送消息
 94     t1 = Thread(target=sendMsg,args=(c,server))
 95     #用户接收消息
 96     t2 = Thread(target=recvMsg,args=(c,))
 97
 98     t1.start()
 99     t2.start()
100     t1.join()
101     t2.join()
102
103     c.close()
104 if __name__ == ‘__main__‘:
105     #输入昵称
106     username = input(‘昵称:‘).strip()
107     print("%s,你已成功进入xx聊天室,想要退出请输入‘quit‘"%username)
108     main()

原文地址:https://www.cnblogs.com/wshr210/p/10911074.html

时间: 2024-12-11 23:15:00

socket聊天室的相关文章

Web Socket 聊天室

Web sockets test Web Socket 聊天室 按下连接按钮,会通过WebSocket发起一个到聊天浏览器的连接. 服务器地址: 用户名: 连接 发送 来自网上.............

python socket 聊天室

import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #绑定端口 s.bind(("127.0.0.1", 8888)) while True: data = s.recvfrom(1024) print(str(data[0].decode("gbk"))) send_data = input("请输入聊天内容") if "exit" in se

【Unity3D自学记录】Unity3D网络之Socket聊天室初探

首先创建一个服务端程序,这个程序就用VS的控制台程序做即可了. 代码例如以下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; namespace SocketServer { class Program { const int Port = 20000; //设置连接port static void Main(strin

socket聊天室(服务端)(多线程)(TCP)

#include<string.h> #include<signal.h> #include<stdio.h> #include<sys/socket.h> #include<stdlib.h> #include<netdb.h> #include<pthread.h> #include<memory.h> #include<semaphore.h> int Thread_num=0,count=0

Socket聊天室-TcpListener,TcpClient

参考自:http://blog.csdn.net/liguo9860/article/details/6148614 服务端: 1 #region 属性 2 3 //请求的客户端连接 4 Socket clientsocket; 5 //当前连接集合 6 List<Client> clients; 7 //请求客户端线程 8 Thread clientservice; 9 //服务器监听线程 10 Thread threadListen; 11 //服务器监听连接 12 TcpListener

socket 聊天室实现

server #include <stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #includ

socket 聊天室

服务端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Net; using System.Thre

PHP+Socket聊天室(telnet命令调试)

class socket { private $_socket; private $_domain = AF_INET; private $_type = SOCK_STREAM; private $_protocol = SOL_TCP; private $_clients = []; private $_max_clients = 10; public function __construct() { if (!extension_loaded('sockets')) { die('the

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu