如何在python中通过套接字建立连接?

2024-10-02 00:36:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下脚本,我希望连接到我们的产品,发送tcl命令(set frequency和其他一些命令),但它只显示:

import Server

Server.ScktConn()

frequency(450-2500): 600

recv: 0 ace_set_frequency C1 600

这是第一个命令,但它甚至没有设置频率(只显示命令,但不应用它)!在

脚本如下:

import socket
import threading
import time

address = ('127.0.0.1', 5426)
def ScktRecv():
    r = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    r.bind(address)
    r.listen(5)
    conn, _ = r.accept()
    csvid = conn.recv(4096)
    print "recv: %s" % csvid
    conn.close()

def ScktConn():
    recv_thread = threading.Thread(target=ScktRecv)
    recv_thread.start()
    time.sleep(1)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(address)
    # our local IP is 192.168.2.1, but it works even with 127.0.0.1, I don't know from where       #it is coming
    Freq=raw_input('Frequency(450-2500): ')
    CmdF='0 ace_set_frequency C1 '+str(Freq)+' \r\n'
    s.send(CmdF)
    s.send('0 ace_azplayer_remove_player AzPlayer1 \r\n')
    s.send('0 ace_azplayer_add_player \r\n')
    s.send('0 ace_azplayer_add_ace AzPlayer1 C1\r\n')
    Path='C:/Users/amir_rajaee/Desktop/gridview_script/PBF/4x4U_wocorr_SNR.csv'
    s.send('0 ace_azplayer_load_csvfile AzPlayer1 '+Path+' \r\n')
    s.close()

但是当我使用下面的脚本时,它设置了频率,但是我的问题是,我没有接收器;我需要有上一个命令的输出(加载csv文件)!公司名称:

^{pr2}$

Tags: import命令脚本sendserveraddresssocketconn
1条回答
网友
1楼 · 发布于 2024-10-02 00:36:04

你好像有两个问题。在

1)您希望打印tcl命令将执行它们。事实并非如此。请查看subprocess library以了解如何实现这一点。在

2)只调用socket.recv一次。要捕获所有发送的消息,您需要接收方不断地侦听已发送的消息。将SockRecv更改为:

address = ('127.0.0.1', 5426)
def ScktRecv():
    r = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    r.bind(address)
    r.listen(5)
    conn, _ = r.accept()
    while True:
        csvid = conn.recv(4096)
        if csvid:
            print "%s" % csvid
    conn.close()

您需要进行进一步的修改以正确处理线程的生命周期。在

相关问题 更多 >

    热门问题