import socket target_host="www.google.com" target_port =80 #建立socket对象 client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #连接客户端 client.connect((target_host,target_port)) #发送一些数据 client.send("GET / HTTP/1.1\r\nHOST: google.com\r\n\r\n") #接收一些数据 response=client.recv(4096) print response
首先,我们建立一个包括AF_INET 和 SOCK_STREAM 参数的socket对象 AF_INET 参数说明我们将使用标准的IPv4地址或者主机名,SOCK_STREAM 说明这将是一个TCP客户端。然后,我们将客户端链接到服务器 并发送一些数据。最后一步是接收返回的数据并将响应数据打印出来。这是一个最简单的TCP客户端。
ai_family 参数指定调用者期待返回的套接口地址结构的类型。它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC.如果指定AF_INET,那么函数就不能反悔任何IPV6相关的地址信息;如果仅指定了AF_INET6,则忽悠vybebg防御热播个IPV4地址信息。AF_UNSOEC则意味着函数返回的是适用于指定主机名和服务名且适合任何协议族的地址。如果摸个主机既有AAAA记录(IPV6)地址,同时又有A记录(IPV4)地址,那么AAA记录将作为sockaddr_in6结构返回,而A记录则作为sockaddr_in结构返回
import socket target_host="127.0.0.1" target_port=80 #建立一个socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #发送一些数据 client.sendto("AAAABBBBCCCC",(target_host,target_port)) #接收一些数据 data,addr=client.recvfrom(4096) print data
正如你看到的,在创建套接字对象时,我们将套接字的类型改为SOCK_DGRAM。之后我们调用sendto()函数将数据传到你想发送的服务器上,因为UDP是一个无连接状态的传输协议,所以不需要再此之前调用 connect() 函数。最后一步是调用recvfrom() 函数接收返回的UDP函数包。你将接收到回传的数据及远程主机的信息和端口号。
scok_stream 是有保障的(既能保证数据正确传送到对方) 面向连接的SOCKET,多用于资料传送。
sock_dgram 是无保障的面向消息的socket,主要用于在网络上发广播信息