Python:2个套接字,从A发送到B,从B发送到A

2024-10-03 11:26:35 发布

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

我已经为此工作了2天了,但我还是没能让它正常工作。在

我想写一个应用程序,它使用两个套接字,中间有一个介质

这个媒体就是这个脚本,它应该从socketA读到SocketB,从SocketB读到socketA。在

不过,看来我没法搞定。在

我的脚本在运行时接受连接,但它不允许我在telnet屏幕上输入内容。在

我在套接字之间使用2个共享列表来传递数据。在

    #!/usr/bin/env python
    import sys
    import arduinoReadThread
    import arduinoWriteThread
    import socket
    import thread



    bolt = 0
    socketArray=list()
    HOST =""
    HOST2=""
    PORT1 =50115
    PORT2 =50125



    s1=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket
    s1.bind((HOST,PORT1)) #bind to that port
    s1.listen(2) #listen for user input and accept 1 connection at a time.
    socketArray.append(s1)
    s2=socket.socket(socket.AF_INET, socket.SOCK_STREAM ) #create an INET, STREAMing socket
    s2.bind((HOST2,PORT2)) #bind to that port
    s2.listen(2) #listen for user input and accept 1 connection at a time.
    socketArray.append(s2)
    print "sockets set up"

    s1ToWriteList = list()


    s2ToWriteList = list()


    def socketFunctionWrite1():
            while(bolt == 0):
                client, address = s1.accept()

                print "Writing connections"
                if len(s1ToWriteList) > 0:
                    client.send(s1ToWriteList.pop(0))


    def socketFunctionRead1():
            while(bolt == 0):
                client2, address = s2.accept()

                f = client2.recv(1024)

                print "reading connection"
                s1ToWriteList.append(f)
                print len(s1ToWriteList)

    def socketFunctionWrite2():
            while(bolt == 0):
                client2, address = s2.accept()
                print "Writing connections"
                if len(s2ToWriteList) > 0:
                    client2.send(s2ToWriteList.pop(0))



    def socketFunctionRead2():
            while(bolt == 0):
                client, address = s1.accept()
                f = client.recv(1024)
            print "reading connection"
            s2ToWriteList.append(f)
            print len(s2ToWriteList)




def shutDown():
        test = raw_input("Quit ?")
        if(test =="y"):
            bolt = 1
        else:
            shutDown()

def spreadSockets():


        thread.start_new_thread(socketFunctionRead1,())
        print "launch 1"
        thread.start_new_thread(socketFunctionRead2,())
        print "launch 2"
        thread.start_new_thread(socketFunctionWrite1,())
        print "launch 3"
        thread.start_new_thread(socketFunctionWrite2,())

        print "launch 4"




spreadSockets()
while(True):
        pass

Tags: importbinddefsocketthreadlisteninetprint
1条回答
网友
1楼 · 发布于 2024-10-03 11:26:35

用了你的密码对我有用。我想你可能做错了是远程登录到了错误的IP地址。不要使用'localhost'或127.0.0.1,你需要使用你的盒子的实际(内部)IP。在

{windows上的{1}如果你能在cd2上看到。在

准确运行代码,无需修改(除了删除顶部的2个未知导入):

启动脚本:

[ 15:01 jon@hozbox.com ~/SO/python ]$ ./sock.py
sockets set up
launch 1
launch 2
launch 3
launch 4
Writing connections
Writing connections
^CTraceback (most recent call last):
  File "./sock.py", line 93, in <module>
    time.sleep(1)
KeyboardInterrupt

然后电话:

^{pr2}$

{My internal}(我的内部接口^):

[ 15:07 jon@hozbox.com ~/SO/python ]$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr **:**:**:**:**:**
          inet addr:10.10.1.11  Bcast:10.10.1.255  Mask:255.255.255.0
          ...

相关问题 更多 >