本地自建服务端、客户端请求

自学完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)

你可能感兴趣的:(本地自建服务端、客户端请求)