python学习笔记(3)_TCP编程

通常我们用socket表示-打开了一个网络连接,需要知道目标计算机IP和端口号,指定协议类型。

[客户端]

import socket

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #AF_INEF表示IPV4, AF_INET6表示IPV6
s.connect(('www.sina.com.cn',80)) #参数是tuple, 80是web服务标准端口

#发送请求
s.send(b'GET / HTTP/1.1\r\nHost:www.sina.com.cn\r\nConnection:close\r\n\r\n')

#接收数据
buffer=[]
while True:
    d=s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data=b''.join(buffer)

#关闭连接
s.close()

#数据分离,写入文件
header, html=data.split(b'\r\n\r\n',1)
print(header.decode('utf-8'))
with open('sina.html','wb') as f:
    f.write(html)

 

[服务器]

一个socket依赖4项:服务器地址/端口,客户端地址/端口 来唯一确定。

服务器要相应多个客户端,所以要用线程/进程,或者之前提到的协程来异步操作。

import socket

#定义TCP连接的操作
def tcplink(sock,addr):
    print('accept connection from %s : %s' % addr)
    sock.send(b'welcome')
    while True:
        data=sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == 'exit'
            break
        sock.send(('hello,%s' %data.decode('utf-8')).encode('utf-8'))
    sock.close()
    print('connection %s:%s close' %addr)
    

#服务器绑定
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',9999))
s.listen(5)
print('waiting for connection...')

#服务器监听
while True:
    sock,addr=s.accept()
    t=threading.Thread(target=tcplink,args=(sock,addr))
    t.start()

连接建立后,服务器首先发一条欢迎消息,然后等待客户端数据,并加上Hello再发送给客户端。如果客户端发送了exit字符串,就直接关闭连接。

 

以上内容摘自http://www.liaoxuefeng.com/

纯粹是为了看的更仔细...

你可能感兴趣的:(python学习笔记(3)_TCP编程)