Python TCP套接字侦听器(Debian)

2024-09-20 03:47:19 发布

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

我开始尝试编写pythontcp套接字侦听器。在

我有一个调制解调器连接到我的Debian盒子,每60秒报告一次GPS NMEA语句。现在我只想运行一个python程序来接收和打印这些GPS消息。在

调制解调器配置为使用端口8764上的TCP将消息发送到Debian IP。在

我创建了一个简单的程序(基于http://pymotw.com/2/socket/tcp.html):

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening
server_address = ('localhost', 8764)
sock.connect(server_address)

# Listen for incoming connections
sock.listen(1)

while True:
    # Wait for a connection
    print 'waiting for a connection'
    connection, client_address = sock.accept()

    try:
        print 'connection from', client_address

        while True:
            data = connection.recv(8)
            print 'received: %s' % data

    except:
        print 'error'

当我运行这个脚本时袜子。接受(),在“等待连接”之后

我不确定这是Python代码中的问题,还是没有在Debian中正确配置TCP套接字。在

运行netstat -tulpn我得到:

^{pr2}$

更新:

来自sudo tcpdump -i any port 8764的输出

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
12:51:27.953851 IP 192.168.0.1.3202 > myHostName.local.8764: Flags [S], seq 1679917557, win 5200, options [mss 1300,sackOK,TS val 5634364 ecr 0,nop,wscale 1], length 0
12:51:27.953896 IP myHostName.local.8764 > 192.168.0.1.3202: Flags [R.], seq 0, ack 1679917558, win 0, length 0
12:51:57.970515 IP 192.168.0.1.3203 > myHostName.local.8764: Flags [S], seq 1717423935, win 5200, options [mss 1300,sackOK,TS val 5664379 ecr 0,nop,wscale 1], length 0
12:51:57.970561 IP myHostName.local.8764 > 192.168.0.1.3203: Flags [R.], seq 0, ack 1717423936, win 0, length 0
12:52:08.981407 IP 192.168.0.1.3204 > myHostName.local.8764: Flags [S], seq 1728493476, win 5200, options [mss 1300,sackOK,TS val 5675389 ecr 0,nop,wscale 1], length 0
12:52:08.981451 IP myHostName.local.8764 > 192.168.0.1.3204: Flags [R.], seq 0, ack 1728493477, win 0, length 0
12:52:39.064132 IP 192.168.0.1.3626 > myHostName.local.8764: Flags [S], seq 1770515829, win 5200, options [mss 1300,sackOK,TS val 5705470 ecr 0,nop,wscale 1], length 0
12:52:39.064175 IP myHostName.local.8764 > 192.168.0.1.3626: Flags [R.], seq 0, ack 1770515830, win 0, length 0

192.168.0.1是GPS调制解调器的地址

所以似乎每隔30秒就会有一次握手。调制解调器不断跳转到新端口,可能是因为先前的通信尝试失败。在


更新:

出于某种原因,我的服务器地址定义出了问题。在

server_address = ('localhost',8764)与{}交换解决了这个问题


Tags: ip调制解调器forserveraddresssocketconnectionlength
2条回答

问题是,您正在显式地监听环回设备(lo,IP 127.0.0.1localhost绑定到该设备)。在

如果您想绑定到所有设备(而且您不关心安全问题),请使用空字符串作为主机

server_address = ('', 8764)

我认为,这是正常的行为,因为你的代码监听连接。connection, client_address = sock.accept()只有在您尝试连接到脚本正在侦听的端口时才会执行。您需要telnet localhost:9764才能使其工作。在

我可能搞错了,但你从来没提过要连接这个端口。在

相关问题 更多 >