网络基础
对于这个网络基础,需要你懂的一点TCP/IP协议的相关知识,最起码知道socket(套接字)是什么。简单来说,套接字就是由地址和端口组成。其次就是懂的socket这个python的模块。
socket:底层网络接口
该模块提供对BSD套接字接口的访问。 它可以在所有现代的Unix系统,Windows,MacOS和其他可能的平台上使用。因为调用了操作系统套接字APIs,所以一些行为在不同操作系统上可能不一样。python接口是将Unix系统调用和库接口直接转换为Python的面向对象样式,socket()函数返回一个套接字对象,这个对象的方法(比如下文的send和recv方法)实现各种套接字系统调用。参数类型封装程度比c接口要高,很多细节我们不用管。(英文好的看官方文档)
TCP客户端1
这个客服端是用来连接百度的服务器的。接下来我们构建另一个客户端,连接自己写的的服务器。
TCP客户端2
先上代码:
import socket
target_host = "127.0.0.1"
target_port = 8888
#创建一个socket对象
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#连接客户端
client.connect((target_host, target_port))
#发送一些数据
client.send(b"Today is 520
")
#接收一些数据
response = client.recv(4096)
print(response)
首先,我们要明白这个客服端的作用:
如果在另一台你能连通的主机上,已经启用了TCP服务端,那么通过这个客服端,你便能发送信息并且接收响应。它们之间的通信通路,便是由socket(即服务端ip地址,端口和客户端ip地址以及端口)建立的
TCP服务端
这个服务端是和上面TCP客户端2配套使用的
import socket
import threading
bind_ip = "127.0.0.1"
bind_port = 8888
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(5)
print("[*] Listening on %s:%d" % (bind_ip, bind_port))
def handle_client(client_socket):
request = client_socket.recv(1024)
print("[*] Received: %s" % request)
client_socket.send(b"ACK!")
client_socket.close()
while True:
client, addr = server.accept()
#print(client)
# output:<socket._socketobject object at 0x7f3628764280> TCP server正是通过这个client对象与客户端通信的
#print(addr) output:('127.0.0.1', 58542) 这里的58542是端口号,是系统随机分配的
print("[*] Accepted connection from:%s:%d" % (addr[0], addr[1]))
client_handler = threading.Thread(target=handle_client, args=(client, ))
client_handler.start()
看运行结果:
是不是很简单?