python: 使用socket实现局域网不同主机通信。解决ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

目录

  • 1 socket的使用
    • 1.1 TCP方法
    • 1.2 UDP方法
  • 2 局域网内连接
    • 2.1
  • 总结


1 socket的使用

1.1 TCP方法

在socket中使用socket.socket建立会话,如果是服务器,需要绑定服务器地址和端口号,然后进行循环监听,当有客户端连接时再接收数据。
代码如下:

import socketdef tcpServer(address,port=8686):# stream代表tcp方式server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)server.bind((address, port))server.listen()print('Server start')while True:client, ad = server.accept()data = client.recv(1024)# 处理接收到的数据print('receive from : ',ad, ' data: ', data)# 回传数据给客户端client.send('I have received your data'.encode('utf-8'))# 如果接收到close则关闭服务器c =[chr(data[i]) for i in range(5)]if ''.join(c) == 'close':breakserver.close()print('Server close')if __name__ == "__main__":address = "localhost"port = 8686tcpServer(address,port)

在客户端,使用send方法向服务器发送一次数据

import socketdef tcpSend(address,port,message):server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.connect((address, port))server.send(message.encode("utf-8"))data = server.recv(1024)server.close()return dataif __name__ == '__main__':address = 'localhost'port = 8686message = 'message'receive = tcpSend(address,port,message)print('receive: ', receive)

1.2 UDP方法

UDP方法面向无连接,在socket设置会话的属性时参数修改为socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
服务器端接收数据是一次接收数据和端口地址,代码如下:

import socketdef udpServer(address,port=8686):# dgram代表udp方式server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.bind((address, port))print('Server start')while True:data, ad = server.recvfrom(1024)# 处理接收到的数据print('receive from : ', ad, ' data: ', data)server.sendto('I have received your data'.encode('utf-8'),ad)c = [chr(data[i]) for i in range(5)]if ''.join(c) == 'close':breakserver.close()print('Server close')if __name__ == "__main__":address = "localhost"port = 8686udpServer(address,port)

客户端

import socketdef udpSend(address,port,message):server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)server.connect((address, port))server.send(message.encode("utf-8"))data = server.recv(1024)server.close()return dataif __name__ == '__main__':address = 'localhost'port = 8686message = 'message'receive = tcpSend(address,port,message)print('receive: ', receive)

2 局域网内连接

当将服务器ip地址替换address时,在两台主机上测试,往往会发生这样的错误
ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
其中一个很大的原因就是个人主机对局域网的连接有防火墙设置。
解决方法:在服务器端通过 控制面板->系统和安全->Windows Defender 防火墙->高级设置->入站/出站规则(入站和出站都要),找到文件和打印机共享(回显请求 - ICMPv4-In/Out) 域中,启用规则,域表示当前局域网。客户端无需设置,即可实现两台主机的测试。

服务器设置

2.1

在客户端,接收来自服务器的数据后,未关闭会话时不能print(data),会导致输入输出错误。

def tcpSend(address,port,message):server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.connect((address, port))server.send(message.encode("utf-8"))data = server.recv(1024)print(data)  # 会在这里陷入等待server.close()return data

总结

简述了TCP和UDP两种方法的应用,以及解决服务器端防火墙导致局域网内两台主机不能成功连通的问题。但是对于服务器还有更多的内容需要设置,没有学,在此不深究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德勤:2018年科技、传媒和电信行业未来趋势预测

来源:亿欧近日,德勤发布了《2018科技、传媒和电信行业预测》报告,对世界与中国的科技、传媒和电信行业在未来1-5年的趋势进行了预测。该报告通过与世界各国行业主管和评论家的数百场访谈及对世界各地数万名消费者进行的调查,分析了…

python: SHA256算法的实现和消息的哈希散列值计算

目录1 SHA2562 实现原理2.1 消息预处理2.2 使用的常量和循环移位函数2.3 主循环3 结果4 对中文编码1 SHA256 SHA256是SHA-2下的一个子算法,与之类似的还有SHA224、SHA384、SHA512,算法原理基本一致。 哈希算法通过对消息进行计算,生成一定长…

财报上的云计算战场: 巨头们垄断加剧

来源: 第一财经一周之内,四大云业务巨头公司前后脚发布财报。亚马逊的云业务(AWS)依然跑在了最前面,以174亿美元排在首位。微软、谷歌、阿里巴巴也没有放慢步伐。阿里云去年累计的营收超过了百亿;微软的Azu…

python实现RSA算法,对数据进行加密认证

RSA算法RSA一、数学原理二、实现代码1 生成素数2 生成秘钥3 对数据进行加密、解密总结RSA RSA是一种非对称加密体制,由公钥和私钥组成,数学原理是实数域的模余法。在使用私钥对数据进行加密后,可用公钥对数据进行解密。 在RSA算法中&#xf…

他研究了5000家AI公司,说人工智能应用该这么做!

来源:公众号InfoQ编辑:陈思 Eva;视频剪辑:汪春良 概要:本文作者 Henry Shi是美国人工智能的博士,连续创业者,专注于 AI 领域的早期投资(AI List Capital管理合伙人)。无…

简明Python教程学习笔记_6_面向对象编程

面向对象编程:https://www.liaoxuefeng.com/wiki/897692888725344/923030496738368面向对象高级编程:https://www.liaoxuefeng.com/wiki/897692888725344/9230305380126401、类、对象 类 和 对象 是面向对象编程的两个主要方面。 类 是创建一个 新类型&a…

哈希值+非对称加密+网络+数字签名,你真的知道怎么给游戏充钱吗

前文 使用socket实现局域网不同主机通信 SHA256算法的实现和消息的哈希散列值计算 python实现RSA算法,对数据进行加密认证 文章目录数字签名与认证攻击类型算法选择实现流程总结数字签名与认证 什么是数字签名? 签名我们大家都知道,A在纸上签…

2017 年脑机接口研发热点回眸

来源:科技导报概要:脑机接口(brain-computer interface,BCI)通过解码人类思维活动过程中的脑神经活动信息,构建大脑与外部世界的直接信息传输通路,在神经假体、神经反馈训练、脑状态监测等领域有…

地牢房间迷宫走廊生成(二),Python实现洪水法、完美迷宫

文章目录前言1 随机房间和房门2 生成走廊2.1生成迷宫2.4 使用循环改进2.3 走廊缩减2.3 走廊再简化总结前言 前面通过随机房间、房门,对房门寻路生成走廊。由于使用A星算法,寻到的是最短路径,这样生成的走廊过直和简单。如果需要生成弯曲的走廊…

Introduce Parameter Object(引入参数对象)

某些参数总是很自然地同时出现 重构:以一个对象取代这些参数

深度解析,马斯克最新发射的先进火箭

来源:环球时报概要:就在几个小时前,美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。就在几个小时前,美国人成功发射了目前全世界运载能力最强的超级火箭——“猎鹰重型”。虽然中芯级火箭在回收过程中坠毁&a…

技术专栏 | 两万字深度长文!从原理到趋势 解剖风口上的区块链技术

来源:芯师爷概要:区块链不是一项新技术,而是一个新的技术组合。其关键技术包括P2P动态组网、基于密码学的共享账本、共识机制、智能合约等技术。区块链不是一项新技术,而是一个新的技术组合。其关键技术包括P2P动态组网、基于密码…

Python 进阶

​Python 进阶:https://eastlakeside.gitbook.io/interpy-zh/ Python 经典教程 专题 系列:https://www.jb51.net/Special/520.htm Python 黑魔法指南:https://magic.iswbm.com/ Python 中文指南:https://python.iswbm.com/ Python…

2018年中国65家机器人产业园布局与规划汇总盘点

来源:机器人创新生态概要:“机器人换人”大潮下,中国已连续两年坐上世界机器人最大消费国的宝座,根据国际机器人联合会(IFR)发布的数据,2016年中国工业机器人的销量为9万台,同比增长…

人工智能与经济学:关于近期文献的一个综述

来源:财新网概要:相比于之前的历次技术进步,“人工智能革命”所引发的冲击更为巨大,其对经济学造成的影响也将更为广泛和深远。人工智能技术的突飞猛进,对经济社会的各个领域都产生了重大影响,这种影响当然…

Pull Up Field(字段上移)

两个子类拥有形同的字段 重构:将该字段移至超类

DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能

维金 编译自 DeepMind Blog量子位 出品 | 公众号 QbitAI目前,深度增强学习(DeepRL)技术在多种任务中都大获成功,无论是机器人的持续控制问题,还是掌握围棋和雅达利的电子游戏。不过,这些方面的进展仅限于孤…

AAAI2018正式落幕 13个世界顶尖AI教授都讲了啥?

来源:智东西概要:2月8日消息,第32届AAAI大会在美国新奥尔良正式闭幕。2月8日消息,第32届AAAI大会在美国新奥尔良正式闭幕。本次大会不仅颁发了最佳论文奖、最佳学生论文奖、经典论文将等一系列奖项。作为顶级学术会议之一&#xf…

Linux 中 VIM 的使用

Vim 官网:http://www.vim.org/ VIM 实用技巧:https://wenku.baidu.com/view/21c5f387d4d8d15abe234ecb.html vim 的一些小技巧:https://www.douban.com/group/topic/1815089 vim 简单实用的技巧总结:http://www.tuicool.com/arti…

Pull Up Method(函数上移)

有些函数,在各个子类中产生完全相同的结果 重构:将该函数移至超类