1. 程式人生 > 其它 >Python高階開發————網路程式設計

Python高階開發————網路程式設計

技術標籤:python 高階開發網路python網路通訊socket

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()