这是python黑帽子上的起始练习,我对其中的用到的函数做了注释,以便日后便于理解。
该程序可以访问百度,返回响应信息。
另外,我注释还有一部分UDP客户端的语句,TCP和UDP对比便于记忆。
# -*- coding:utf-8 -*- # 创建客户端,类似于浏览器发送请求 import socket target_host = "www.baidu.com" # 127.0.0.1 target_port = 80 # 建立一个socket对象 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建TCP连接 # socket.AF_INET 使用标准的IPv4地址或者主机名 # socket.SOCK_STREAM 流式socket,应用于TCP # socket.SOCK_DGRAM 数据报式socket,应用于UDP # client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 创建UDP连接 # 连接客户端 client.connect((target_host,target_port)) # 连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 # client.connect_ex(host,port) 成功返回0,失败返回error # 发送一些数据 client.send(("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n").encode()) # 发送TCP数据。将string中的数据发送到连接的套接字。 # 返回值是要发送的字节数量,该数量可能小于string的字节大小。 # UDP发送 # s.sendto(string[,flag],address) # 将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。 # client.sendto("AAABBBCCC",(target_host,target_port)) # 接收一些数据 response = client.recv(4096) # s.recv(bufsize[,flag]) 接受TCP套接字的数据。 # 数据以字符串形式返回,bufsize指定要接收的最大数据量。 # flag提供有关消息的其他信息,通常可以忽略。 # UDP接收 # s.recvfrom(bufsize[.flag]) # 接受UDP套接字的数据。与recv()类似,但返回值是(data,address)。 # 其中data是包含接收数据的字符串,address是发送数据的套接字地址。 # data,addr = client.recvfrom(4096) print(response) # print(data) # 关闭连接 # client.close()
推荐这篇文章对socket介绍的很详细 http://blog.csdn.net/rebelqsp/article/details/22109925
时间: 2024-10-14 10:41:01