Python高階開發————網路程式設計
阿新 • • 發佈:2021-01-03
技術標籤: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()