參考:https://blog.csdn.net/weixin_33721344/article/details/89663010
1.環境
windows10
python3.6
網絡調試助手工具NetAssist
2.服務端代碼
# -*- coding: utf-8 -*-
"""
@desc: tcp兩個端口轉發,從一個端口發數據,可以從另一個端口接數據
"""
import socket
import threading
import signal
import sys
REMOTE_IP = ''#不綁定IP,遠程電腦可以訪問該機器
LOCAL_IP = ''
REMOTE_PORT = 10002
LOCAL_PORT = 10001
# 接收數據緩存大小
PKT_BUFF_SIZE = 4096
# 調試日誌封裝
def send_log(content):
print (content)
return
# 單向流數據傳遞
def tcp_mapping_worker(conn_receiver, conn_sender):
while True:
try:
data = conn_receiver.recv(PKT_BUFF_SIZE)
except Exception:#當與服務socket斷開連接時
send_log('Event: Connection closed.')
break
if not data:
send_log('Info: No more data is received.')
break
try:
conn_sender.sendall(data)
except Exception:
send_log('Error: Failed sending data.')
break
# send_log('Info: Mapping data > %s ' % repr(data))
send_log('Info: Mapping > %s -> %s > %d bytes.' % (conn_receiver.getpeername(), conn_sender.getpeername(), len(data)))
conn_receiver.close()
conn_sender.close()
return
def main():
local_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remote_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
send_log("1.套接字創建完畢.")
local_server.bind((LOCAL_IP,LOCAL_PORT))
remote_server.bind((REMOTE_IP,REMOTE_PORT))
send_log("2.端口綁定完畢.")
#監聽端口,最大連接數量128
local_server.listen(128)
remote_server.listen(128)
send_log("3.監聽兩端端口.")
while True:
# 接收到新的客戶端連接則創建服務套接字
send_log("4.等待兩端客戶端連接 %s:%d %s:%d" %(LOCAL_IP,LOCAL_PORT,REMOTE_IP,REMOTE_PORT))
(local_conn, local_addr) = local_server.accept()
(remote_conn, remote_addr) = remote_server.accept()
send_log("5.兩端客戶端連接端口成功.")
#LOCAL_PORT端口數據轉發給REMOTE_PORT端口
thread1 = threading.Thread(target=tcp_mapping_worker, args=(local_conn, remote_conn))
thread1.start()
#REMOTE_PORT端口數據轉發給LOCAL_PORT端口
thread2 = threading.Thread(target=tcp_mapping_worker, args=(remote_conn, local_conn))
thread2.start()
#join()作用爲主線程在所有子線程執行完之後才執行
thread1.join()
thread2.join()
send_log("執行完成")
if __name__ == "__main__":
main()
3.打開網絡調試工具
互相發送數據都可以。