编程实现局域网下两台 PC 机互联填坑之路_网络编程使局域网两个设备-程序员宅基地

技术标签: 局域网互联  socket  计算机网络  

这几天专业课《通信与网络》实验要求使用socket实现两台计算机的通信,本以为对socket编程还算熟悉的我应付这个实验应该没什么毛病,但是一动手发现还是挺多问题的,先将填坑之路记录于此。

实验器材

两台运行在同一局域网下的windows10家庭版PC

实验代码

运行在一台计算机上的服务端

# -*- coding: utf-8 -*-
# author:           inpurer(月小水长)
# pc_type           lenovo
# create_date:      2018/12/6
# file_name:        server.py
# qq_mail			[email protected]

from socket import *

serverSocket = socket(AF_INET,SOCK_STREAM)

serverSocket.bind(('10.10.21.222',12000))

serverSocket.listen(1)


while True:
	connectionSocket, addr = serverSocket.accept()
	print("已与:",addr,"建立连接")
	for i in range(100):
		sendMessage = "数字" + str(i+1)
		connectionSocket.send(sendMessage.encode("utf-8"))

	connectionSocket.close()

具体代码解释问题可以参考我以前的一篇博文:传送门

这里想说的一个坑是serverSocket.bind(('10.10.21.222',12000)),我以前本机通信的时候设置的服务端绑定的ip都是直接用127.0.0.1表示本机,但是这里不行,必须要用上网ip,也就是运营商根据DHCP协议给你动态分配的ip,每台电脑不一样,(经历一次开关机)每个时间段也不一定一样,怎么获取这个ip呢,有很多教程说是cmd下ipconfig,但是一般查到的ip有许多个,比如你装个虚拟机啥的就会多出一个ip,还有的教程说是可以用python代码来获取ip,

def getHostIp():
	name = socket.getfqdn(socket.gethostname(  ))
	#获取本机ip
	ip = socket.gethostbyname(name)
	#print(name)
	#print(ip)
return ip

通过这种方式获取的ip也不行,具体什么问题我有空再仔细分析,下面说我的解决办法,看图
进入windows系统设置,点击网络和internet
在这里插入图片描述
先在左边选中以太网,再在右边选中已连接的网络
在这里插入图片描述
然后就看到ip地址了
在这里插入图片描述

然后我瞬间明白了,ipconfig指令加上当前已连接的网络是哪一个就能获取我们想要的ip
在这里插入图片描述

运行在另一台电脑上的客户端

# -*- coding: utf-8 -*-
# author:           inpurer(月小水长)
# pc_type           lenovo
# create_date:      2018/12/6
# file_name:        client.py
# description:      月小水长,热血未凉

from socket import *

clientSocket = socket(AF_INET,SOCK_STREAM)

clientSocket.connect(("10.10.21.222",12000))

while True:
	receiveMessage = clientSocket.recv(1024)
	if not receiveMessage:
		clientSocket.close()
		break
	receiveMessage = receiveMessage.decode("utf-8")
	print(receiveMessage)

这个倒没啥坑,只是在两台电脑上运行起来后发现始终建立不起连接。所以这一晚我主要的工作量在下面。

巨坑之路

声明:下面的解决办法只是充分条件,我也不知道是不是充要条件,顺序最好按照我的来

首先关闭服务端电脑防火墙,由于只是在局域网防火墙,为了安全起见,只关闭域防火墙

在这里插入图片描述

以下的步骤整体上和上一步没有先后,主要是解决ping不ping地通并不超时的问题

然后点击防火墙高级设置,具体位置可看上图,点了之后进入到这样一个界面:

在这里插入图片描述

在入站规则的文件和打印机共享找到两个ICMPV4的回显请求,分别点击这两个回显请求,

按照图示的来,该勾选的勾选
在这里插入图片描述

在这里插入图片描述

记得修改之后点击应用生效,要对两个回显请求分别做上述操作,然后再运行代码,成功!

在这里插入图片描述

在这里插入图片描述

仅记录核心操作,诸如怎么进入防火墙设置之类的问题如不懂请自行百度,

如能ping通,但是仍然无法建立链接,除关闭域防火墙外,请尝试关闭电脑管家、360、MacFee等杀毒软件再重试。有问题欢迎留言或邮件。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ygdxt/article/details/86562919

智能推荐

react之antd组件InputNumber控制小数点_antd inputnumber decimalseparator-程序员宅基地

文章浏览阅读3.9k次。InputNumber控制用户输入小数点的个数在项目过程中有个需求,需要控制用户输入小数点的个数问题。话不多说上代码://输入框绑定方法<InputNumber style={{ width: '100%' }} formatter={limitDecimals} parser={limitDecimals}/>方法:const limitDecimals = (value: string | number): string => { const reg_antd inputnumber decimalseparator

matlab 约束条件下三元函数的图像问题_三元函数图像-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏15次。题目:绘制z=x+y,0<x<1,0<y<1,0.5<x+y<1(0.5<z)约束条件下的图像代码:clc;clear;x=0:0.01:1;y=0:0.01:1;[xx,yy]=meshgrid(x,y);[m,n]=size(xx); for i=1:m for j=1:n z(i,j)=x(i)+y..._三元函数图像

linux下恢复误删除oracle的数据文件_oracle 数据文件误删 linux-程序员宅基地

文章浏览阅读480次。场景描述:操作系统级别的删除数据文件(/oracle/oradata/ora10g/system1.dbf),而且数据库没有崩溃,仍然处于open状态。原理:在Linux操作系统中,如果文件从操作系统级别被删除掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得。如果关闭数据库,则句柄就会丢失。恢复步骤如..._oracle 数据文件误删 linux

VScode 自定义代码颜色、背景颜色、方法名、括号颜色-程序员宅基地

文章浏览阅读10w+次,点赞108次,收藏323次。自学前端刚开始的时候使用Hbuilder,Hbuilder界面设计的很小清新,我特别喜欢,代码提示啥方面做的也特别好,很好上手,作为小白我用了很长一段时间。后来浅浅学习微信小程序开发,得写wxml,Hbilder上没有wxml格式的代码提示,代码高亮等。于是我用了一段时间vscode,在网上按推荐安装了很多花里胡哨的插件呢。给我感觉是不好上手。于是后来又接触了sublime,sublime相比..._vscode 自定义代码颜色、背景颜色、方法名、括号颜色

深度学习框架Tensorflow学习与应用 图像数据处理之二_tensorflow深度学习框架实现了对图像亮度的调整-程序员宅基地

文章浏览阅读255次。四:图像色彩调整 和图像翻转类似,调整图像的亮度、对比度、饱和度和色相在很多图像识别应用中都不会影响识别结果。所以在训练神经网络模型时,可以随机的调整训练图像的这些属性,从而使训练得到的模型尽可能地受到无关因素的影响。话不多说,上代码了。注意:路径要用英文,不要有中文(一)调整亮度与调整对比度import matplotlib.pyplot as pltimport tensorf..._tensorflow深度学习框架实现了对图像亮度的调整

《ASP.NET5》无法路由到Web API Controller控制器_.net的web无法访问到控制器-程序员宅基地

文章浏览阅读5.6k次。这个标题不知道恰当不恰当,具体的问题就是我在一个现有的项目上创建了一个Web API Controller Class,但是按F5启动调试后,通过给定的路径如“http://localhost:3753/api/values/5”访问Get(int id)方法时,没有反应,设置了断点也进不去。但这个问题在网上又没有找到解决方法,于是又新建了一个ASP.NET Web Application类型的项_.net的web无法访问到控制器

随便推点

嵌入式Linux开发板_迅为iTOP-4412精英版入门篇(一)_4412开发入门-程序员宅基地

文章浏览阅读911次,点赞2次,收藏4次。迅为iTOP-4412开发板平台,ARM Cortex A9架构,主频1.4GHz-1.6GHz,1GB 双通道 DDR3(2GB 可选),4GB EMMC(16GB 可选),提供多种外接模块,如:RFID模块、继电器模块、CAN总线 RS485总线模块、串口转接板、矩阵键盘模块、AVIN模块、GPS模块、VGA模块、500万摄像头模块、WIFI/蓝牙模块等。拥有丰富的板载接口以及众多配套扩展模块,并提供丰富的学习教程与资源,是嵌入式Linux学习与开发最佳选择。_4412开发入门

扫荡倾斜摄影单体化难题_进行模型单体化容易遇到哪些问题-程序员宅基地

文章浏览阅读5.2k次,点赞6次,收藏27次。单体化问题的由来 我们先来说说什么是“单体化”。“单体化”其实指的就是每一个我们想要单独管理的对象,是一个个单独的、可以被选中的实体(Entity);即用鼠标点击时可以显示为不同颜色(称为“高亮”)显示,可以附加属性,可以被查询统计等等。只有具备了“单体化”的能力,数据才可以被管理,而不仅仅是被用来查看。 对于人工建模而言,单体化是一个不言而喻的事情。即在人工建模的过程中,自然会把需要单独管理的_进行模型单体化容易遇到哪些问题

snakeyaml自定义pojo写入yml文件时属性字段排序问题_snakeyaml 写入yaml-程序员宅基地

文章浏览阅读1.1k次。snakeyaml自定义pojo写入yml文件时属性排序问题解决。_snakeyaml 写入yaml

使用jbpm出现异常 java.lang.NoClassDefFoundError: de/odysseus/el/ExpressionFactoryImpl-程序员宅基地

文章浏览阅读2.9k次。java.lang.NoClassDefFoundError: de/odysseus/el/ExpressionFactoryImpl at org.jbpm.pvm.internal.script.JuelScriptEngine.(JuelScriptEngine.java:66) at org.jbpm.pvm.internal.script.JuelS_java.lang.noclassdeffounderror: de/odysseus/el/expressionfactoryimpl

浅谈安全运营中心-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏6次。最近两年安全运营中心这个概念被提到的次数越来越多了,虽然没有一个建设的标准模式,但很多大厂都在提,也号称有了各种落地。那么,到底是怎样呢。_安全运营中心

mysql 序列化缓存到txt文件查找数据与直接查找数据 性能对比,13,601条数据文件缓存平均0.085秒后只需0.025秒 推荐 程序员导航网http://www.je666.com_je666com-程序员宅基地

文章浏览阅读2.8k次。推荐 程序员导航网http://www.je666.comCREATE TABLE IF NOT EXISTS `ylmf_site_search` ( `id` int(11) NOT NULL, `displayorder` int(11) NOT NULL, `pinyin` varchar(255) CHARACTER SET gbk NOT NULL,_je666com

推荐文章

热门文章

相关标签