13.1 基本概念
- 套接字:每台主机有一个唯一的主机地址标识,同时主机内还有标识自己进程的序号id,称作端口,将这两个标识符结合就构成了一个套接字(socket),这个套接字能唯一标识网络中的一个进程。
- 运输层的协议主要有UDP和TCP协议
- 区别
- UDP是无连接、不可靠协议
- TCP是有连接、可靠协议
- 区别
13.2 socket概念
13.3 Tcp协议和Udp协议
13.4 Socket编程
13.5 实验
13.5.1 socket服务端
服务端
In:
import socket,sys
In:
srv_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 9990
srv_sock.bind((host,port))
srv_sock.listen(5)
文件下载
In:
def get_file(file_name):
try:
with open(file_name,'r',encoding='utf-8') as f:
content = f.read()
except:
print("没有此文件!")
content = '1'
finally:
return content
In:
while True:
client_sock,addr = srv_sock.accept()
file_name = client_sock.recv(1024).decode('utf-8') #接收-文件名
content = get_file(file_name) #获取文件内容,函数get_file
client_sock.send(content.encode('utf-8')) #发送内容
client_sock.close()
out:
客户端连接地址:('192.168.89.2', 49806)
需要下载:output.txt
内容:
我来到山西五台山
我来到北京天安门
In:
# while True:
# client_sock,addr = srv_sock.accept()
# print(f"客户端连接地址:{addr}")
# msg = "欢迎连接到服务端" + "\n"
# client_sock.send(msg.encode('utf-8'))
# client_sock.close()
13.5.2 socket客户端
In:
import socket,sys
In:
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 9990
client_sock.connect((host,port))
In:
file_name = str(input("请输入文件名:"))
client_sock.send(file_name.encode('utf-8')) #发送文件名
content = client_sock.recv(2048).decode('utf-8')
with open("recv"+file_name,"w",encoding='utf-8') as f:
f.write(content)
out:
请输入文件名:output.txt
In:
client_sock.close()