我开始尝试编写一个Python TCP套接字监听器。Python TCP套接字监听器(Debian)
我有一个调制解调器连接到我的Debian框,每60秒报告一次GPS NMEA句子。现在我想要做的就是运行一个Python程序,它将接收并打印这些GPS消息。
调制解调器配置为发送端口使用TCP的消息Debian的IP 8764
我创建了一个简单的程序(基于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'
当我运行这个脚本它只是坐在sock.accept(),在'等待连接'后
我不确定这是否是我的Python代码中的问题, 。
运行netstat -tulpn
我得到:
tcp 0 0 127.0.0.1:8764 0.0.0.0:* LISTEN 4327/python
更新:
输出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 = ('192.168.0.4',8764)
交换server_address = ('localhost',8764)
解决问题
你说的意思是什么坐镇在 ...'。它挂了还是什么? – ForceBru 2015-03-13 16:36:38
'tcpdump -i任何端口8764'是否显示任何到达端口“8764”的数据包?这将是调试此问题的第一步。 – linuxfan 2015-03-13 16:36:49
@ForceBru我的意思是打印后'等待连接'程序什么都不做。我假设sock.accept()没有返回。 – user3817250 2015-03-13 16:50:29