一、客户端创建以及测试
书写代码
import socket
if __name__ == '__main__':
tcp_test_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 创建tcp套接字
# AF_INET:使用的地址类型是ipv4
# SOCK_STREAM:使用的协议是TCP
tcp_test_socket.connect(('192.168.86.1',8080))
# 设定链接的服务端的IP和端口
# .connect函数只接收一个参数,所以需要用元组传递IP和端口
send_test_data='这里是客户端!收到请回复!'
# 创建一个参数储存发送的数据,可以使用input
send_test_data_encode=send_test_data.encode('gbk')
# 将数据转码成gbk,Windows编码为gbk,Linux编码为utf-8
tcp_test_socket.send(send_test_data_encode)
# 将转码好的数据传输
recv_test_data=tcp_test_socket.recv(1024)
# 设定一个参数接收数据,同时设定接收的最大字节数是1024
print(recv_test_data)
# 将接收到的数据直接打印,跟后面转码过的进行对比
recv_test_data_decode=recv_test_data.decode('gbk')
# 将接收到的数据转码并且储存到新的参数里
print(recv_test_data_decode)
# 打印转码后的数据
tcp_test_socket.close()
# 关闭套接字
测试流程:
1.使用网络调试助手,调整为tcp服务端模式,并且设置好端口,然后打开等待链接
2.运行代码后发现调试助手已经接收到了信息
3.测试接收有没有问题,在下面发送一段信息
4.查看运行结果
二、服务端创建以及测试
测试流程:
1.书写代码并运行
import socket
if __name__ == '__main__':
tcp_server_test=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 创建套接字
# AF_INET:IP地址类型为ipv4
# SOCK_STREAM:TCP协议
tcp_server_test.bind(('',9090))
# 设置监听
# IP地址默认不设置,防止当前服务器或电脑有多个IP
# 与客户端一致,只接受一个参数,使用元组传递参数
tcp_server_test.listen(128)
# 设置最大监听个数为128
server_connect_socket,ip_port=tcp_server_test.accept()
# 创建两个参数对接收的数据进行拆包
# server_connect_socket储存套接字
# ip_port储存IP和端口
print(f'客户端的地址和端口号:{ip_port}')
# 打印一下
recv_data=server_connect_socket.recv(1024)
# 创建一个参数储存接收的数据,最大为1024字节
print(recv_data.decode('gbk'))
# 将接收的数据转码后输出
send_data='数据处理中!请稍后...'
# 设置参数储存准备发送给客户端的数据
server_connect_socket.send(send_data.encode('gbk'))
# 将数据转码后发给客户端
tcp_server_test.close()
# 对话结束,关闭套接字
2.使用调试助手对服务端发起请求,设置IP和端口事宜已经说过不在强调
3.查看代码输出端发现已经收到了客户端的IP和端口,与上图信息对比发现一致
4.使用调试助手传输一些信息,发现服务端收到了信息,客户端也收到了提示信息
三、使用创建的客户端和服务端进行一次通信
测试流程:
1.先把调试助手关掉,稍微调整一下代码(改一下端口)
客户端:
import socket
if __name__ == '__main__':
tcp_test_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 创建tcp套接字
# AF_INET:使用的地址类型是ipv4
# SOCK_STREAM:使用的协议是TCP
tcp_test_socket.connect(('192.168.86.1',9090))
# 设定链接的服务端的IP和端口
# .connect函数只接收一个参数,所以需要用元组传递IP和端口
send_test_data='这里是客户端!收到请回复!'
# 创建一个参数储存发送的数据,可以使用input
send_test_data_encode=send_test_data.encode('gbk')
# 将数据转码成gbk,Windows编码为gbk,Linux编码为utf-8
tcp_test_socket.send(send_test_data_encode)
# 将转码好的数据传输
recv_test_data=tcp_test_socket.recv(1024)
# 设定一个参数接收数据,同时设定接收的最大字节数是1024
print(recv_test_data)
# 将接收到的数据直接打印,跟后面转码过的进行对比
recv_test_data_decode=recv_test_data.decode('gbk')
# 将接收到的数据转码
print(recv_test_data_decode)
# 打印转码后的数据
tcp_test_socket.close()
# 关闭套接字
服务端
import socket
if __name__ == '__main__':
tcp_server_test=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 创建套接字
# AF_INET:IP地址类型为ipv4
# SOCK_STREAM:TCP协议
tcp_server_test.bind(('',9090))
# 设置监听
# IP地址默认不设置,防止当前服务器或电脑有多个IP
# 与客户端一致,只接受一个参数,使用元组传递参数
tcp_server_test.listen(128)
# 设置最大监听个数为128
server_connect_socket,ip_port=tcp_server_test.accept()
# 创建两个参数对接收的数据进行拆包
# server_connect_socket储存套接字
# ip_port储存IP和端口
print(f'客户端的地址和端口号:{ip_port}')
# 打印一下
recv_data=server_connect_socket.recv(1024)
# 创建一个参数储存接收的数据,最大为1024字节
print(recv_data.decode('gbk'))
# 将接收的数据转码后输出
send_data='数据处理中!请稍后...'
# 设置参数储存准备发送给客户端的数据
server_connect_socket.send(send_data.encode('gbk'))
# 将数据转码后发给客户端
tcp_server_test.close()
# 对话结束,关闭套接字
2.先打开服务端,然后打开客户端,发现已经完成了通信,测试成功!