自学完python3基础知识后,尝试的第一个demo:(直接上代码,复制可直接用)
服务端:
# 文件名:server.py
# 导入 socket、sys 模块
import socket
import sys
# 获取本地ip
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 114.114.114.114:是国内移动、电信和bai联du通通用的DNS。
# 8.8.8.8:是GOOGLE公司提供的DNS,该地址是全球通用的。
s.connect(('114.114.114.114', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
# 创建 socket 对象
#获取tcp/ip套接字
tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#获取udp/ip套接字
#udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 获取ip(也可直接写127.0.0.1)
host = get_host_ip()
port = 9999
# 绑定端口号
tcpSock.bind((host, port))
# 设置最大连接数,超过后排队
tcpSock.listen(5)
print('开始监听')
while True:# 不断监听
print('等待接收')
# 建立客户端连接
clientsocket,addr = tcpSock.accept()
# 打印客户端地址
print("连接地址: %s" % str(addr))
# 接收客户端消息(小于 1024 字节)
client_msg = clientsocket.recv(1024)
print('client msg: %s' %client_msg.decode())
# 相应客户端信息(发送信息给客户端)
msg = '欢迎访问!'+ "\r\n"
clientsocket.send(msg.encode('utf-8'))
# 关闭客户端套接字
clientsocket.close()
#关闭服务器套接字(可选)
tcpSock.close()
客户端:
# 文件名:client.py
# 导入 socket、sys 模块
import socket
import sys
# 获取本地ip
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 114.114.114.114:是国内移动、电信和bai联du通通用的DNS。
# 8.8.8.8:是GOOGLE公司提供的DNS,该地址是全球通用的。
s.connect(('114.114.114.114', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
# 创建 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取ip(也可直接写127.0.0.1)
host = get_host_ip()
# 设置端口号
port = 9999
# 连接服务,指定主机和端口
s.connect((host, port))
# 给服务端发送消息
s.send('我来逛逛!'.encode('utf-8'))
# 接收服务端相应的数据(小于 1024 字节)
msg = s.recv(1024)
# 关闭客户端套接字
s.close()
print (msg.decode('utf-8'))
使用:
我是在MAC上测试,创建两个终端窗口,先运行服务端的代码
python3 /Users/xxx/server.py
再在另一个窗口运行客户端代码
python3 /Users/xxx/client.py
注:不知道路径的直接拉文件就行
补充:
在获取本地ip时,网上很多都是教如下方式获取,但是我获取不到(别人能获取到),查资料是说计算机名称取得有问题(迷茫),所以改用demo中的方法获取ip
import socket
获取本计算机的名称
hostname = socket.gethostname()
获取本计算机IP
ip = socket.gethostbyname(hostname)
网友评论