服务器可以选择IP地址以及端口号,客户端可以随便选择IP地址以及端口号的版本

发布时间 2023-11-06 08:31:56作者: songjunwan

服务器可以选择IP地址以及端口号,客户端可以随便选择IP地址以及端口号的版本

UDP协议

服务器代码

#互相通信版本(pro版本)
import socket

# udp的服务器(server)的格式
server = socket.socket(type=socket.SOCK_DGRAM)

s = input('IP:')
# s = tuple(s)
t = input('端口号:')
# t = tuple(t)
# 给udp服务器绑定IP地址和端口
server.bind((s,int(t)))
print('成功绑定启动')

while True:
    # recvfrom
    # udp收取文件的格式
    data, addr = server.recvfrom(1024)
    print(f'某某计算机以连接{addr}')#这里可以读取发送方的IP地址
    print(data.decode('utf-8'))

    fasong = input('请回复:')# 这里给客户端回复对应的信息


    jieshu = input('是否结束(yes/no):')#这是判断是否结束用的
    #这里添加判断方便终止连接
    if jieshu == 'yes':
        fasong = fasong.encode('utf-8')  # 这里进行utf-8的编码,方便接收

        # udp发送格式
        server.sendto(fasong, addr)  # 这里的第一个是要发送的数据,第二个是发送的地址
        break

    else:
        fasong = fasong.encode('utf-8')  # 这里进行utf-8的编码,方便接收

        # udp发送格式
        server.sendto(fasong, addr)  # 这里的第一个是要发送的数据,第二个是发送的地址

客户端代码

# 互相通信版本(pro版本)
import socket

client = socket.socket(type=socket.SOCK_DGRAM)
s = input('需要访问的服务器IP:')
# s = tuple(s)
t = input('需要访问的服务器端口号:')
# t = tuple(t)
#这里将IP和端口号给包进变量里面再带入到下面去使用
j = (s, int(t))

while True:
    msg = input('发送:')  # 这里来写需要发给服务器的数据

    jieshu = input('是否结束(yes/no):')  # 这是用于判断是否结束用的

    msg = msg.encode('utf-8')

    # 这里添加是否结束判读
    if jieshu == 'yes':
        # 直接发
        # 这里的第一个参数是数据部分,第二个参数是服务端地址
        client.sendto(msg, j)
        # 这里接收来自服务器的数据
        data, addr = client.recvfrom(1024)  # 这一步比较重要因为服务器发过来的包括了数据以及发送方的地址信息

        data = data.decode('utf-8')

        print(data)  # 这里打印来自服务器的数据

        break
    else:
        # 直接发
        # 这里的第一个参数是数据部分,第二个参数是客户端地址
        client.sendto(msg, j)
        # 这里接收来自服务器的数据
        data, addr = client.recvfrom(1024)  # 这一步比较重要因为服务器发过来的包括了数据以及发送方的地址信息

        data = data.decode('utf-8')

        print(data)  # 这里打印来自服务器的数据

TCP协议

服务器代码

#互相通信版本(pro版本)
import socket

# TCP的服务器(server)的格式
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s = input('IP:')
# s = tuple(s)
t = input('端口号:')
# t = tuple(t)
# 给udp服务器绑定IP地址和端口
server.bind((s, int(t)))
server.listen(5)
print('成功绑定启动')
conn, addr = server.accept()#conn表示新的socket对象,addr表示客户端的地址信息
while True:
    # recvfrom
    # TCP收取文件的格式
    data = conn.recv(1024)
    print(f'某某计算机以连接{addr}')#这里可以读取发送方的IP地址
    print(data.decode('utf-8'))

    fasong = input('请回复:')# 这里给客户端回复对应的信息


    jieshu = input('是否结束(yes/no):')#这是判断是否结束用的
    #这里添加判断方便终止连接
    if jieshu == 'yes':
        fasong = fasong.encode('utf-8')  # 这里进行utf-8的编码,方便接收

        # udp发送格式
        conn.send(fasong)  # 这里的第一个是要发送的数据,第二个是发送的地址
        break

    else:
        fasong = fasong.encode('utf-8')  # 这里进行utf-8的编码,方便接收

        # TCP发送格式
        conn.send(fasong)  # 这里的第一个是要发送的数据,第二个是发送的地址



#关闭与客户端的连接
conn.close()
#关闭服务器的主要通信端口
server.close()

客户端代码

# 互相通信版本(pro版本)
import socket

client = socket.socket()
s = input('需要访问的服务器IP:')
# s = tuple(s)
t = input('需要访问的服务器端口号:')
# t = tuple(t)
#这里将IP和端口号给包进变量里面再带入到下面去使用
client.connect((s, int(t)))
# j = (s, int(t))

while True:
    msg = input('发送:')  # 这里来写需要发给服务器的数据

    jieshu = input('是否结束(yes/no):')  # 这是用于判断是否结束用的

    msg = msg.encode('utf-8')

    # 这里添加是否结束判读
    if jieshu == 'yes':
        # 直接发
        # 这里的第一个参数是数据部分,第二个参数是服务端地址
        client.send(msg)
        #接收服务器的数据
        data = client.recv(1024)

        # 解码收到的字节串以还原文本
        huanyuan = data.decode('utf-8')

        print(f'收到服务器的回复:{huanyuan}')  # 这里是把这个服务器发来的请求输出出来

        break
    else:
        # 直接发
        # 这里的第一个参数是数据部分,第二个参数是客户端地址
        client.send(msg)
        # 这里接收来自服务器的数据
        data = client.recv(1024)  # 这一步比较重要因为服务器发过来的包括了数据以及发送方的地址信息

        data = data.decode('utf-8')

        print(data)  # 这里打印来自服务器的数据