Python高级开发————网络编程

Python高级开发————网络编程

TCP

tcp_client.py

from socket import *
#创建套接字,默认参数
sockfd=socket()
#发起连接,服务器地址
server_addr=('localhost',8888)
sockfd.connect(server_addr)
#消息收发
while(1):
    i=input('请输入指令(发送:1 结束:0):')
    if i=='0':
        break
    sockfd.send(i.encode())
    a=input('输入要发送的内容:')
    sockfd.send(a.encode())
    data=sockfd.recv(1024)
    print('From server:',data.decode())
    print('\n')
#关闭
sockfd.close()

tcp_server.py

import socket
#创建套接字
sockfd=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定地址
sockfd.bind(('localhost',8888))
#设置监听
sockfd.listen(5)
#等待处理
print('Waiting for connect...')
connfd,addr=sockfd.accept()
#收发消息
while(1):
    data=connfd.recv(1024)
    m=data.decode()
    q=data.decode()
    if m=='1':
        data=connfd.recv(1024)
        print('收到来自客户端的消息为:',data.decode())
        n=connfd.send('收到该消息'.encode())
        print('发送了%d字节数据'%n)
        print('\n')
    else:#关闭套接字
        connfd.close()
        sockfd.close()
        break

UDP_client.py

from socket import *
HOST='localhost'
PORT=8890
ADDR=(HOST,PORT)
#创建套接字
sockfd=socket(AF_INET,SOCK_DGRAM)
#收发消息
i = input('请输入指令(发送:1 结束:0):')
sockfd.sendto(i.encode(),ADDR)
msg,addr=sockfd.recvfrom(1024)
print('From server:',msg.decode())
sockfd.close()

UDP_server.py

from socket import *
#创建套接字
sockfd=socket(AF_INET,SOCK_DGRAM)
#绑定地址
server_addr=('localhost',8890)
sockfd.bind(server_addr)
#收发消息
data,addr=sockfd.recvfrom(1024)
m = data.decode()
sockfd.sendto('thanks'.encode(), addr)
sockfd.close()

需求

(1)从客户端输入一个学生的id、姓名、年龄、分数;
(2)将其发送到服务端,由服务端写入到一个文本文件中;
(3)每个信息占一行;
(4)数据传输分别使用TCP和UDP套接字完成。

实现

TCP_client.py

from socket import *
#创建套接字,默认参数
sockfd=socket()
#发起连接,服务器地址
server_addr=('localhost',8889)
sockfd.connect(server_addr)
#消息收发
while(1):
    i=input('请输入指令(发送:1 结束:0):')
    if i=='0':
        sockfd.send(i.encode())
        break
    sockfd.send(i.encode())
    id=input('输入学生ID:')
    name=input('输入学生姓名:')
    age=input('输入学生年龄:')
    score=input('输入学生成绩:')
    stu=id+','+name+','+age+','+score
    sockfd.send(stu.encode())
    # sockfd.send(id.encode())
    # sockfd.send(name.encode())
    # sockfd.send(age.encode())
    # sockfd.send(score.encode())
    data=sockfd.recv(1024)
    print('From server:',data.decode())
#关闭
sockfd.close()

TCP_server.py

import socket
#创建套接字
sockfd=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#绑定地址
sockfd.bind(('localhost',8889))
#设置监听
sockfd.listen(100)
#等待处理
print('Waiting for connect...')
connfd,addr=sockfd.accept()
#收发消息
while(1):
    data=connfd.recv(1024)
    m=data.decode()
    if m=='1':
        # id=connfd.recv(1024)
        # name = connfd.recv(1024)
        # age = connfd.recv(1024)
        # score = connfd.recv(1024)
        # print('ID:',id.decode())
        # print('姓名:',name.decode())
        # print('年龄:',age.decode())
        # print('成绩:',score.decode())
        stu = connfd.recv(1024)
        stu=stu.decode()
        stu=stu.split(',')
        id=str(stu[0])
        name=str(stu[1])
        age=str(stu[2])
        score=str(stu[3])
        print('ID:', id)
        print('姓名:',name)
        print('年龄:',age)
        print('成绩:',score)
        connfd.send('收到学生消息'.encode())
        #写入文本
        result =['学号:'+id+' '+'姓名:'+name+' '+'年龄:'+age+' '+'成绩:'+score]
        with open('test_tcp.txt', 'a')as f:
            f.writelines(result)
            f.writelines('\n')
    else:#关闭套接字
        connfd.close()
        sockfd.close()
        break

UDP_client.py

from socket import *
HOST='localhost'
PORT=8890
ADDR=(HOST,PORT)
#创建套接字
sockfd=socket(AF_INET,SOCK_DGRAM)
#收发消息
while True:
    i = input('请输入指令(发送:1 结束:0):')
    if i == '0':
        sockfd.sendto(i.encode(),ADDR)
        break
    sockfd.sendto(i.encode(),ADDR)
    id = input('输入学生ID:')
    name = input('输入学生姓名:')
    age = input('输入学生年龄:')
    score = input('输入学生成绩:')
    sockfd.sendto(id.encode(),ADDR)
    sockfd.sendto(name.encode(), ADDR)
    sockfd.sendto(age.encode(), ADDR)
    sockfd.sendto(score.encode(), ADDR)
    msg,addr=sockfd.recvfrom(1024)
    print('From server:',msg.decode())
sockfd.close()

UDP_server.py

from socket import *
#创建套接字
sockfd=socket(AF_INET,SOCK_DGRAM)
#绑定地址
server_addr=('localhost',8890)
sockfd.bind(server_addr)
#收发消息
while True:
    data,addr=sockfd.recvfrom(1024)
    m = data.decode()
    if m == '1':
        id,addr=sockfd.recvfrom(1024)
        name, addr = sockfd.recvfrom(1024)
        age, addr = sockfd.recvfrom(1024)
        score, addr = sockfd.recvfrom(1024)
        print('ID:', id.decode())
        print('姓名:', name.decode())
        print('年龄:', age.decode())
        print('成绩:', score.decode())
        sockfd.sendto('thanks'.encode(), addr)

        result = str('学号:'+id.decode()+' '+'姓名:'+ name.decode()+' '+'年龄:'+ age.decode()+' '+'成绩:'+ score.decode())
        # with open('test_udp.txt', 'r', encoding='utf-8')as f:
        #     for line in f:
        #         result.append(result + '\n')
        with open('test_udp.txt', 'a')as f:
            f.writelines(result)
            f.writelines('\n')
    else:
        sockfd.sendto('通话结束'.encode(), addr)
        break
sockfd.close()

你可能感兴趣的:(python,高级开发,网络,python,网络通信,socket)