问题遇到的现象和发生背景
关于TCP客户端与服务端开发的小小的小问题:
当客户端与服务端建立连接后,无论客户端发送什么都会接收到服务端返回的固定静态web页面,这个是服务端
# coding=gbk
import socket
import threading
if __name__ == '__main__':
# 创建套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定
tcp_server_socket.bind(('', 8080))
# 监听
tcp_server_socket.listen(128)
# 等待连接
while True:
conn_socket, ip_port = tcp_server_socket.accept()
print('连接成功', ip_port)
recv_socket = conn_socket.recv(1024).decode()
print('接收到的数据是', recv_socket)
with open('index.html', 'rb') as file:
f_read = file.read()
# 相应行
request_lines = 'http/1.1 200 0k \r\n'
# 响应头
request_head = 'Server:ZZT \r\n'
# 响应体
request_body = f_read
# 发送数据
request_http = (request_lines + request_head + '\r\n').encode('gbk') + request_body
conn_socket.send(request_http)
conn_socket.close()
tcp_server_socket.close()
这个是服务端
# coding=gbk
import socket
"""
客户端:我们这个界面就是客户端,网络调试助手相当于是服务端
"""
if __name__ == '__main__':
# 创建客户端套接字 socket.SOCK_STREAM:表示的是流式传输协议,也就是tcp这种传输协议,socket.AF_INET:表示的是使用的是ipv4的IP地址
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 和客户端建立连接 里面传参元组(主机地址:ip,端口号:port)
tcp_client_socket.connect(("192.168.6.1", 8080))
print('连接服务器成功')
# 发送数据
while True:
data = input('请输入您要发送的数据')
if data == 'out':
break
tcp_client_socket.send(data.encode('utf-8'))
# 接收数据 1024代表接受的最大数据
recv_data = tcp_client_socket.recv(1024)
print('服务端回复的数据是:', recv_data.decode('utf-8'))
# 关闭套接字
tcp_client_socket.close()
遇到的现象和发生背景,请写出第一个错误信息
,我想提取出客户端请求的资源路径,然后打印出来,然后就在服务端里加了字符串分割,然后输出(按照报文格式可知,按照空格分隔字符串后,返回一个列表,下标为1的就是客户端的请求资源路径)这个时候,我就搞不懂了
```python
while True:
# 等待客户端请求连接
conn_socket, ip_port = tcp_sever_socket.accept()
print('客户端连接成功', ip_port)
# 获取浏览器发送的http请求报文数据
client_request_data = conn_socket.recv(1024).decode()
** # print(client_request_data)
**字符串分割:**
client_request = client_request_data.split(' ')
print(client_request)
**打印输出**
request_path = client_request[1]
print('客户端请求的资源为:', request_path)**
# 读取固定的页面数据,组装成为http响应报文数据发送给浏览器
with open('.' + request_path, 'rb') as f:
f_data = f.read()
# 响应行
request_line = 'HTTP/1.1 200 OK\r\n'
###### 运行结果及详细报错内容
运行之后,客户端发送123,而服务端就报错,不是说下标越界,就是分割对象为空,
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/511505901876114.jpg "#left")
###### 我想要达到的结果
这和我想的不一样啊😭,他不是按照请求报文去分割的,而是直接分割了客户端输入的数据,我就不知道怎么改了,大佬救救我