计算机网络 socket编程

发布于 2020-04-27  381 次阅读


1.使用SMTP发送邮件

第1步:打开win 10的 telnet 客户端;开启邮箱的SMTP服务

第2步:打开命令窗口(cmd),输入 telnet

第3步:打开本地回显

第4步:连接到邮箱的SMTP服务器

Welcome to Microsoft Telnet Client

Escape Character is 'CTRL+]'

Microsoft Telnet> set localecho
Local echo on
Microsoft Telnet> open smtp.qq.com 25
Connecting To smtp.qq.com...

第5步:一系列的操作

  1. 打招呼helo qq
  2. 要求登录 auth login
  3. 输入base64加密后的邮箱账号
  4. 输入base64加密后的授权码(授权码也可在qq邮箱的设置中找到)
  5. 登陆成功!

第六步:发送邮件

  1. mail from:<address>
  2. rcpt to:<address>
  3. 输入具体内容:data
220 newxmesmtplogicsvrszc5.qq.com XMail Esmtp QQ Mail Server.
helo qq                                                                             
502 Invalid input from 100.107.4.33 to newxmesmtplogicsvrszc5.qq.com                     
helo qq                                                                               
250-newxmesmtplogicsvrszc5.qq.com-100.77.8.93-24972836
250-SIZE 73400320
250 OK                 
auth login    
334 VXNlcm5hbWU6                                                                      
***************(address after BASE64)
334 UGFzc3dvcmQ6
***************(password after BASE64)
235 Authentication successful                                 
mail from:<1565977519@qq.com>
250 OK.                                 
rcpt to:<r.cheng1018@outlook.com>
250 OK                                   
data
354 End data with <CR><LF>.<CR><LF>.
From: keep@outlook.com
To: r.cheng1018@outlook.com
subject: send mail using SMTP service

Hello, U receive this email through SMTP service. This is just a test.
.
250 OK: queued as.

所接收到的消息:

可以看到我们更改了收件人所看到发送的邮箱账号。

实际的发送地址为:1565977519@qq.com,但是所收到的邮件中显示的发送方地址为:keep@outlook.com。(ps: 这个地址还有头像,看起来这个邮件地址已经被他人注册并使用过)

2. 简单的客户-服务器程序

TCP套接字编程

客户——服务器应用程序:客户向服务器发送一行数据,服务器将这行数据改为大小并回送给客户。

TCPClient

from socket import *

serverName = '192.168.1.6'
serverPort = 12000
clientSocket = socket(AF_INET,SOCK_STREAM)
#AF_INET:指示底层网络用的是IPv4
#SOCK_STREAM:表明其是一个TCP套接字
clientSocket.connect((serverName,serverPort))
#这行代码执行完之后,执行三次握手,并在客户端可服务器之间建立一个通道
sentence = input('Input lowercase sentance:')
clientSocket.send(sentence.encode())
#将sentence中的字节放到该TCP连接中去
modifiedSentence = clientSocket.recv(1024)
print('From server: ', modifiedSentence.decode())
clientSocket.close()
#关闭套接字

TCPServer

有欢迎套接字和连接套接字之分

# -*- coding: utf-8 -*-
from socket import *

serverPort = 12000
serverSocket = socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
#serverSocket是欢迎套接字
serverSocket.listen(1)
#让服务器聆听客户的TCP请求,其中参数定义了请求连接的最大数
print('The server is ready to receive')

while True:
    connectionSocket,addr = serverSocket.accept()
    #当客户敲门时,程序为serverSocket调用accept()方法,这在服务器创建了一个
#名为connectionServer的新套接字,由这个客户专用
    sentence = connectionSocket.recv(1024).decode()
    capticalSentence = sentence.upper()
    connectionSocket.send(capticalSentence.encode())
    connectionSocket.close()

客户端运行结果