编程实现局域网下两台 PC 机互联填坑之路

这几天专业课《通信与网络》实验要求使用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等杀毒软件再重试。有问题欢迎留言或邮件。

发布了84 篇原创文章 · 获赞 250 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/ygdxt/article/details/86562919
今日推荐