python udp客户端无法获取数据_用Python实现UDP协议的ping程序(客户端和服务器端都在本地),服务器端套接字接受不到来自客户端的信息是为什么?...

2017/10/12第一次修改问题

现在不清楚的地方就是:采用 127.0.0.1 的主机IP可行,而采用另一种主机IP 192.168.*.* 却不行。

防火墙12001端口是开放的。

以下为原始问题

服务器端套接字调用recvfrom(1024)处于等待接受状态,客户端套接字调用了sendto方法,已经确认了IP地址和端口号是正确的。

实际运行后发现服务器端的套接字始终读取不到任何东西(.recvfrom(1024)一直没有读取到任何东西),但是客户端的.sendto()每次都是执行完毕的。

服务器端代码:

# UDPPingerServer.py

# We will need the following module to generate randomized lost packets

import random

from socket import *

# Create a UDP socket

# Notice the use of SOCK_DGRAM for UDP packets

serverSocket = socket(AF_INET, SOCK_DGRAM)

# Assign IP address and port number to socket

serverSocket.bind(('', 12001))

while True:

# Generate random number in the range of 0 to 10

rand = random.randint(0, 10)

# Receive he client packet along with address it is coming from

print('before recv')

message, address = serverSocket.recvfrom(1024)

print('after recv')

# Capitalize the message from the client

message = message.upper()

print('after upper')

# If rand is less than 4, we consider the packet lost and do not respond if

if rand < 4:

continue

# Otherwise, the server responds

serverSocket.sendto(message, address)

客户端代码:

# encoding: utf-8

from socket import *

import time

serverName = '192.168.0.5' # 服务器地址

serverPort = 12001 # 服务器制定的端口

clientSocket = socket(AF_INET, SOCK_DGRAM) # 创建UDP套接字,使用IPv4协议

clientSocket.settimeout(1) # 设置套接字超时值1秒

for i in range(0, 10):

sendTime = time.time()

message = ('Ping %d %s' % (i+1, sendTime)).encode() # 生成数据报,编码为bytes以便发送

try:

print('before-send')

clientSocket.sendto(message, (serverName, serverPort)) # 将信息发送到服务器

print('after-send')

modifiedMessage, serverAddress = clientSocket.recvfrom(1024) # 从服务器接收信息,同时也能得到服务器地址

print('after-recvd')

rtt = time.time() - sendTime # 计算往返时间

print('Sequence %d:Reply from %s RTT = %.3f' % (i+1, serverName, rtt)) # 显示信息

except Exception as e:

print('Sequence %d Request timed out' % (i+1))

clientSocket.close() # 关闭套接字

客户端程序代码中的IP地址是我本机固定的内网IP地址,是确信的。(另外我也用windows命令行的Ping功能Ping通了本机IP)

12001端口号没有被其他程序占用是确信的..(不然也无法运行,因为会提示10048错误)

如果问题描述有不清楚的地方请告知,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值