0x01 环境
python2 pycharm
0x02 程序
客户端程序:
# -*- coding:UTF-8 -*-
import socket
'''
target_host='www.baidu.com'
target_port=80
'''
target_host='localhost'
target_port=3345
data='ABCDEF'# 创建一个socket对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 连接客户端
client.connect((target_host,target_port))
# 发送一些数据
#client.send("GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n")
client.send(data)
# 接收一些数据
response=client.recv(4096)
print response
服务器端程序:
# -*- coding:utf-8 -*-
import socket
import threadingbind_ip="localhost"
bind_port=3345server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((bind_ip,bind_port))
server.listen(1)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("ACK")client_socket.close()while True:client,addr=server.accept()print addrprint "[*] Accepted connection from: %s:%d" %(addr[0],addr[1])#挂起客户端程序,处理传入的数据client_handler=threading.Thread(target=handle_client,args=(client,))#target是线程需要去执行的函数名,args是一个元组,是函数的参数client_handler.start()
0x03 解释
客户端程序我就不解释了,我在另一篇解释的很详细,不明白可以到这里看
https://blog.csdn.net/qq_41683305/article/details/113809707
服务端程序:
server.bind((bind_ip,bind_port))
bind(address):绑定地址(host,port)到套接字, 在 AF_INET下,以元组(host,port)的形式表示地址。
server.listen(1)
listen(backlog):开始 TCP 监听。backlog 指定在拒绝连接之前,操作系统可以挂起的最大连接数量
client,addr=server.accept()
accept():接受一个客户端的连接请求,不同于以上socket()返回的用于监听和接受客户端的连接请求的套接字,与客户端通信是通过这个新的套接字上发送和接收数据来完成的,每个连接进来的客户端,都会通过accept函数返回一个不同的客户端socket对象和属于客户端的套接字,client就是新的套接字,addr是一个元组,存放的第一个元素是客户端IP,第二个是端口
client_handler=threading.Thread(target=handle_client,args=(client,))
Thread是一个类,创建一个新的线程对象,target指定调用的函数,args指定调用函数的参数,是一个元组,后面要加一个’,’ ,当调用start函数时,就回去执行这个函数
0x04 远行结果
先运行服务端程序,再运行客户端程序
服务器端结果:
客户端结果: