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,一经查实,立即删除!

相关文章

Replace Parameter with Explicit Methods(以明确函数取代参数)

函数的行为,完全取决于参数值 public void setValue(final String name, final int value) {if ("height".equals(name)) {this.height value;return;}if ("width".equals(name)) {this.width value;return;}Assert.shouldNeverReachHere();…

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

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

简明Python教程学习笔记_4_数据结构

在Python中有三种内建的数据结构——列表、元组和字典。 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目。假想你有一个购物列表,上面记载着你要买的东西,你就容易理解列表了。只不过在你的购物表上&…

動態修改SiteMapPath路徑

http://www.purecs.net/Threads/t376.aspx在網頁上放置一個SiteMapPath可以提供使用者一個清楚的瀏覽路標指示,如果你的SiteMap是靜態不會變動的倒是很簡單,只要編寫好一個XML檔放上去,其它的事就可以不用管了,但是在動態網頁中Si…

C++学习之路 | PTA乙级—— 1007 素数对猜想 (20分)(精简)

1007 素数对猜想 (20分) 让我们定义d ​n ​​ 为:d ​n ​​ p ​n1 ​​ −p ​n ​​ ,其中p ​i ​​ 是第i个素数。显然有d ​1 ​​ 1,且对于n>1有d ​n ​​ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给…

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

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

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

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

Preserve Whole Object(保持对象完整)

从某个对象中取出若干值,将它们作为某一次函数调用的参数 int low daysTempRange().getLow(); int height daysTempRange().getHigh(); withinPlan plan.withinRange(low, high); 重构:改为传递整个对象 withinPlan plan.withinRange(daysTempRan…

简明Python教程学习笔记_5_解决问题

问题 我提出的问题是: 我想要一个可以为我的所有重要文件创建备份的程序。 尽管这是一个简单的问题,但是问题本身并没有给我们足够的信息来解决它。进一步的分析是必需的。例如,我们如何确定该备份哪些文件?备份保存在哪里&#…

【开始研究Community Server,转贴一点东西】Community Server资料收集

Community Server学习资料 uGoer 系列文章 Community Server专题一:概述Community ServerCommunity Server专题二:体系结构Community Server专题:附件(DOC&PPT)--2005年10月10日更新Community Server专题三:HttpModuleCommuni…

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

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

C++学习之路 | PTA乙级—— 1008 数组元素循环右移问题 (20分)(精简)

1008 数组元素循环右移问题 (20分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A ​0 ​​ A ​1 ​​ ⋯A …

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

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

Replace Parameter with Methods(以函数取代参数)

对象调用某个函数,并将其结果传递给另一个函数 int basePrice quantity * itemPrice; double discountLevel getDiscountLevel(); double finalPrice discountPrice(basePrice, discountLevel); 重构:让参数接受者移除该项参数,并直接调…

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

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

C++学习之路 | PTA乙级—— 1009 说反话 (20分)(精简)

1009 说反话 (20分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字…

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

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

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

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

Visual Studio“Orcas”October 2006 CTP版下载

Visual Studio “Orcas” October 2006 CT版可以下载了,但这次Release的是一个虚拟机的镜像,所以需要在虚拟PC上运行,文件的大小是4150.5 MB,有点太大了。下载地址:http://www.microsoft.com/downloads/details.aspx?…

C++学习之路 | PTA乙级—— 1010 一元多项式求导 (25分)(精简)

1010 一元多项式求导 (25分) 设计函数求一元多项式的导数。(注:x ​n ​​ (n为整数)的一阶导数为nx ​n−1 ​​ 。) 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数…