网络基础

网络基础

对于这个网络基础,需要你懂的一点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()  

看运行结果:

是不是很简单?

原文地址:https://www.cnblogs.com/busui/p/6881581.html