网络编程——聊天室——服务器
from socket import socket
from threading import Thread
def main():
class ClientHander(Thread):
def __init__(self, client):
super().__init__()
self._client = client
def run(self):
try:
while True:
try:
data = self._client.recv(1024)
for client in clients:
if client != self._client:
client.send(data)
if data.decode('utf-8') == 'byebye':
clients.remove(self._client)
self._client.close()
break
except Exception as e:
print(e)
clients.remove(self._client)
break
except Exception as e:
print(e)
server = socket()
server.bind(('ip地址', 12345))
server.listen(512)
print('正在监听...')
clients = []
while True:
curr_client, addr = server.accept()
clients.append(curr_client)
ClientHander(curr_client).start()
if __name__ == '__main__':
main()
聊天室客户端
from socket import socket
from threading import Thread
def main():
class RefreshScreenThread(Thread):
def __init__(self, client):
super().__init__()
self._client = client
def run(self):
while running:
data = self._client.recv(1024)
print(data.decode('utf-8'))
nickname = input('请输入你的昵称:')
myclient = socket()
myclient.connect(('ip地址', 12345))
running = True
RefreshScreenThread(myclient).start()
while True:
content = input('请发言:')
if content != 'byebye':
content = nickname + ':' + content
myclient.send(content.encode('utf-8'))
if content == 'byebye':
running = False
break
if __name__ == '__main__':
main()
UDP协议下的发送端
- 不能保证可靠通信
- 发送端切片,接收端要组装
- 如果做应用,最好自定义协议,以便可以更好解析数据
from socket import socket, SOCK_DGRAM
def main():
sender = socket(type=SOCK_DGRAM)
with open('mm.jpg', 'rb') as f:
data = f.read()
data_len = len(data)
total = 0
while total < data_len:
sender.sendto(data[total:total + 1024], ('ip地址', 6789))
total += 1024
if __name__ == '__main__':
main()
接收端
from socket import socket,SOCK_DGRAM
def main():
receiver = socket(type=SOCK_DGRAM)
receiver.bind(('ip地址', 6789))
data = bytes()
while True:
seg,addr = receiver.recvfrom(1024)
data += seg
if len(seg) < 1024:
break
with open('hello.jpg', 'wb') as f:
f.write(data)
print('图片已接收')
if __name__ == '__main__':
main()
发送邮件
from email.mime.text import MIMEText
from smtplib import SMTP
def main():
sender = SMTP('smtp.163.com')
sender.login('邮箱', '授权码')
content ="""
给你讲个笑话吧
一个男孩去找自己的同学,在同学家的门口看见一只大狗。同学在门内
嚷:“你怎么还不进来?”男孩:“这只狗咬不咬人?”同学:“我们
也很想知道,因为它是刚刚才来的!”
此致,敬礼!
wxz 即日
"""
message = MIMEText(content, 'plain', 'utf-8')
message['Subject'] = '好久不见甚是想念'
sender.sendmail('发送者邮箱', ['接收者邮箱'], message.as_string())
print('邮件发送成功')
if __name__ == '__main__':
main()
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP
def main():
sender = SMTP('smtp.163.com')
sender.login('邮箱', '授权码')
message = MIMEMultipart()
message['From'] = 'wxz'
message['To'] = 'hh'
message['Cc'] = '抄送者邮箱'
message['subject'] = '请查收附件中的数据'
text_msg = MIMEText('附件中有本月关键数据请查收', 'plain', 'utf-8')
message.attach(text_msg)
att2 = MIMEText(open('hello.docx', 'rb').read(), 'base64', 'utf-8')
att2['Content-Type'] = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
att2['Content-Disposition'] = 'attachment;filename=hello.docx'
message.attach(att2)
sender.sendmail('发送者邮箱', '接收者邮箱', message.as_string())
print('邮件发送成功')
if __name__ == '__main__':
main()
import http.client
import urllib
import random
host = "106.ihuyi.com "
sms_send_uri = "/webservice/sms.php?method=Submit"
account = "C*******"
password = "d4bc030d*************"
def send_sms(text, mobile):
params = urllib.parse.urlencode(
{'account': account, 'password': password, 'content': text, 'mobile': mobile, 'format': 'json'})
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
conn = http.client.HTTPConnection(host, port=80, timeout=30)
conn.request("POST", sms_send_uri, params, headers)
response = conn.getresponse()
response_str = response.read()
conn.close()
return response_str
if __name__ == '__main__':
mobile = "157*******"
Random6 = str(random.randint(0,9)) + str(random.randint(0,9))+str(random.randint(0,9))+str(random.randint(0,9))+str(random.randint(0,9))+str(random.randint(0,9))
print(Random6)
text = ("您的验证码是:%i。请不要把验证码泄露给其他人。" % int(Random6))
print(send_sms(text, mobile))