python socket recvfrom_Python:socket.recvfrom()不返回任何地址

python socket recvfrom_Python:socket.recvfrom()不返回任何地址我正在尝试编写示例here的Python版本,但是由于某种原因,我在客户端和服务器中对socket.recvfrom()的每次调用都将其地址返回值为None.我唯一能想到的可能是套接字是STREAM套接字,但是当我尝试将类型更改为socket.SOCK_DGRAM时,调用socket.listen()时出错.我该如何解决这个问题?defserver(port):sock=socket.soc…

大家好,又见面了,我是你们的朋友全栈君。

我正在尝试编写示例here的Python版本,但是由于某种原因,我在客户端和服务器中对socket.recvfrom()的每次调用都将其地址返回值为None.我唯一能想到的可能是套接字是STREAM套接字,但是当我尝试将类型更改为socket.SOCK_DGRAM时,调用socket.listen()时出错.我该如何解决这个问题?

def server(port):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.bind((‘127.0.0.1’, port))

sock.listen(5)

clientsocket, address = sock.accept()

kkp = KnockKnockProtocol(); #Class which implements knock knock

outputLine = kkp.processInput();

clientsocket.sendto(outputLine, address)

inputLine, address = clientsocket.recvfrom(MAX_BYTES)

while inputLine:

print inputLine, address

outputLine = kkp.processInput(inputLine);

clientsocket.sendto(outputLine, address)

if outputLine == “Bye.”:

break

inputLine, address = clientsocket.recvfrom(MAX_BYTES)

def client(port):

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((“127.0.0.1”, port))

fromServer, address = sock.recvfrom(MAX_BYTES)

while fromServer:

print “Server: ” + fromServer

if fromServer == “Bye.”:

break

fromUser = raw_input()

if fromUser:

print “Client: ” + fromUser

sock.sendto(fromUser, (“127.0.0.1”, port))

fromServer, address = sock.recvfrom(MAX_BYTES)

if __name__ == ‘__main__’:

choices = {‘client’: client, ‘server’: server}

parser = argparse.ArgumentParser(description=’Send and receive UDP locally’)

parser.add_argument(‘role’, choices=choices, help=’which role to play’)

parser.add_argument(‘-p’, metavar=’PORT’, type=int, default=1060, help=’UDP port (default 1060)’)

args = parser.parse_args()

function = choices[args.role]

function(args.p)

解决方法:

使用数据报套接字或流套接字.您正在尝试分割差异.您要使用哪个?如果要基于连接的字节流协议,请使用流套接字.如果您需要无连接的数据报协议,请使用数据报套接字.

如果要使用流套接字,请不要使用recvfrom.它基于连接,唯一可以接收的是来自该特定连接的字节.

如果要使用数据报套接字,请不要使用监听或接受.由于它是无连接的,因此您既不能监听也不能接受连接.

标签:sockets,python

来源: https://codeday.me/bug/20191119/2037321.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163460.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery获取日期,对比日期大小

    jquery获取日期,对比日期大小

    2021年7月16日
    79
  • VS2010中生成遇到的 web.config 问题

    VS2010中生成遇到的 web.config 问题

    2021年9月3日
    60
  • JAVA 面向对象 类 对象 封装「建议收藏」

    JAVA 面向对象 类 对象 封装「建议收藏」面向对象概念面向对象其实是一种编程思想,通过它可以把生活中复杂的事情变得简单化,从原来的执行者变成了指挥者。面向对象是基于面向过程而言的。面向过程强调的是过程,比如:打开冰箱门2.把大象放进去3.关上冰箱门面向对象强调的是结果,比如:什么样的冰箱?什么样的大象?谁负责把大象装进去?而不是关注那个负责的人怎么把大象装冰箱里.衣服脏了,直接让女盆友去处理,等着穿干净的就可以了。你不关注中间的过程,只要找好对象就可以了~再比如.我们想吃一道菜,无需考虑是怎么传菜,怎么做菜的,只需点菜即

    2022年7月19日
    14
  • 周鸿祎

    周鸿祎文/周鸿祎来自微信公共号:财经十一人在BAT的光芒下,在美团、小米构造的互联网第二阵营中,特别是在猎豹上市之后,360多次欲言又止,一反常态。360公关团队告诉财经十一人,老周在闭关思考3

    2022年7月1日
    26
  • 如何设置python的环境变量_anaconda3添加环境变量

    如何设置python的环境变量_anaconda3添加环境变量在python项目实践中,不知道为什么我的os.getenv一直拿不到环境变量,于是我就试了三种设置环境变量的方法,中解决了问题。一.系统变量设置python环境变量的配置方法:1、第一步在我们的电脑上鼠标右键此电脑,选择属性,进去之后,点击高级系统设置,如下图所示2、第二步进去之后,点击环境变量,如下图所示:3、第三步进去环境变量界面之后,点击path,进行编辑,如下图所示:二.pycharm用户环境变量设置:1.打开文件—设置2.打开构建,执行,部署–python控制台–环境变量

    2022年8月29日
    3
  • 基于Android开发的天气预报app(源码下载)「建议收藏」

    基于Android开发的天气预报app(源码下载)「建议收藏」基于AndroidStudio环境开发的天气app-系统总体介绍:本天气app使用AndroidStudio这个IDE工具在Windows10系统下进行开发。主要实现了:1、定位城市天气显示;2、城市编辑功能(增、删、改、查)以及对应天气显示信息的改变;3、天气信息的Widget窗口显示(城市的编辑功能可以远程的更新Widget窗口信息的显示)4、下拉刷新、天气显示界面左右滑动、城市拖拽等小模…

    2022年7月25日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号