socket等的理解

学习自https://www.liaoxuefeng.com/wiki/1016959663602400/1017788916649408
socket是在客户机和服务机之间的连接。涉及到客户机和服务机两台电脑,客户机负责发送建立请求,和回收接收到的信息,而服务机要负责监控相应的端口程序,以响应请求
根据代码来理解原理
客户端:
1、新建一个socket,里面得说明是符合什么连接协议,ipv4或者ipv6,在就是定义为socket传输流
sc= socket.socket(socket.AF_INET,socket.SOCKET_STREAM)
2、需要和什么服务器建立连接,连接的ip和端口。如百度的端口80
sc.connect(('www.baidu.com',80))
3、建立好连接后,客户机需要发送请求信息给服务器
sc.send('GET HTTP/1.1/ \r\nHOST: www.baidu.com\r\nConnection:close \r\n\r\n')----\r表示回车,\n换行 \r\n\r\n表示结束
4.执行完前面三步,sc里面已经有服务机返回的信息了。
建立一个用于接收的容器,并把内容写入tagertHtml内
list = []
targetHtml= 'D:\targetHtml.html'
while True:
data = sc.recv(2048)
if data:
list.append(data)
else:
break
d = b''.join(list)#将list数据转换为二进制数据(很重要)
with open(targetHtml,'wb') as f:
f.write(d)

客户机:
sc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sc.bind('127.0.0.1',80)
sc.listen(5)
print('waiting for connection')
while True:
socket,addr =sc.accept()#接收到socket和addr
#创建线程去完成任务
t = threading.Thread(target=tcplink,args(socket,addr))
t.start()

def tcplink(socket,addr):
socket.send(b'welcome')
while True:
data = socket.recv(1024)
time.sleep(1)
if not data or data.decode('utf-8') == 'exit':
break
socket.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
socket.close()
print('conect close')

posted @ 2019-10-12 19:13  堕落先锋  阅读(152)  评论(0编辑  收藏  举报