TCP服务端

import socket
import threading

server_ip = '0.0.0.0' #服务端ip,本地客户端可访问127.0.0.1
server_port = 9999 #开放的端口

server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #新建socket,发现服务端与客户端都是有socket对象生成的

server.bind((server_ip,server_port)) #socket建立服务端

listen_num = 5 #设置最大连接数

server.listen(listen_num) #服务端开启监听状态

print('客户端已开启,最大连接数为%d,请访问 %s:%d' % (listen_num,server_ip,server_port))

def handel_client(client_socket): #构造多线程函数,用于打印客户端内容与回复

    request = client_socket.recv(1024) #接收客户端发送的信息

    print('接收到内容:%s' % request) #打印接收的信息

    client_socket.send('朕知!'.encode()) #向客户端返回信息
    client_socket.close() #关闭与客户端的连接

while True: #一直保持服务端运行
    client , addr = server.accept()  #这里服务端开始接收客户端的连接对象

    print('有新的连接:%s:%d'%(addr[0],addr[1]))

    client_header = threading.Thread(target=handel_client,args=(client,)) #将新连接的客户端放到多线程函数中构造一个新对象
    client_header.start() #执行线程任务(显示内容与响应)

这里可以拿我们前面的TCP客户端与其通信,本地连接地址:127.0.0.1,端口号为9999。TCP客户端与服务器本质上都是socket对象,服务器端用到了bind()函数来新建服务。

服务器:

客户端已开启,最大连接数为5,请访问 0.0.0.0:9999
有新的连接:127.0.0.1:58493
接收到内容:b'GET / HTTP/1.1 Host:baidu.com'

TCP客户端接收到的响应内容:

b'\xe6\x9c\x95\xe7\x9f\xa5\xef\xbc\x81'