tcp套接字与udp套接字的区别
tcp套接字与udp套接字的对比
1.tcp套接字
服务端 import socket import struct import json import os import hashlib # #1.买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #2.绑定手机卡 phone.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) phone.bind(('127.0.0.1',8084)) #3.开机 phone.listen(5) #可以最多挂起5个连接 def get(filename_str,path): header_dict={'filename':filename_str, 'total_size':os.path.getsize(path), 'sha1': 'c38edee18ff56c46b49a751d72' } header_json=json.dumps(header_dict) header_bytes=header_json.encode('utf-8') conn.send(struct.pack('i',len(header_bytes))) conn.send(header_bytes) with open(path,'rb') as f: m=hashlib.md5() for line in f: conn.send(line) m.update(line) md5=m.hexdigest() conn.send(md5.encode('utf-8')) #4.等电话连接 while True: #连接循环 print('starting...') conn,addr=phone.accept() print('IP:%s,PORT:%s' %(addr[0],addr[1])) #5.收发信息 while True: #通信循环 try: filename=conn.recv(1024) filename_str=filename.decode('utf-8') path='D:/text/'+filename_str get(filename_str,path) except Exception: break conn.close() phone.close() 客户端 import socket import struct import json import hashlib # 1.买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 2.打电话 phone.connect(('127.0.0.1',8084)) # 3.发收消息 while True: filename=input('>>>:').strip() if filename=='q':break if not filename:continue phone.send(filename.encode('utf-8')) obj=phone.recv(4) header_size=struct.unpack('i',obj)[0] header_bytes=phone.recv(header_size) header_json=header_bytes.decode('utf-8') header_dict=json.loads(header_json) total_size=header_dict['total_size'] recv_size=0 path='F:/text/'+filename with open(path,'wb') as f: m=hashlib.md5() while recv_size<total_size: res_data=phone.recv(1024) f.write(res_data) recv_size+=len(res_data) m.update(res_data) phone_md5=m.hexdigest() a=phone.recv(1024) server_md5=a.decode('utf-8') #4.挂电话 phone.close()
2.udp套接字
服务端
from socket import *
server=socket( AF_INET,SOCK_DGRAM)
server.bind(('127.0.0.1',8080))
while True:
data,client_addr=server.recvfrom(1024)
server.sendto(data.upper(),client_addr)
server.close()
客户端
from socket import *
client=socket( AF_INET,SOCK_DGRAM)
while True:
client.sendto(b'hello',('127.0.0.1',8080))
data,server_addr=client.recvfrom(1024)
print(data.decode())
3.操作系统的作用
(1)可以将复杂、丑陋的硬件接口抽象出良好的接口,供用户使用
(2)管理、调度进程,使多个进程变得有序化
4.多道技术
(1)针对单核,实现并发;多核主机每个核都用到多道技术,至于如何调用哪一个核,取决于操作系统的调度算法
(2)空间上的复用:如内存中存在多道程序
(3)时间上的复用:复用一个CPU的时间片

浙公网安备 33010602011771号