Python 网络编程

通过socket获取baidu网页

#!/usr/bin/env python
# -*- encoding=utf-8 -*-

import socket
'''

通过socket模仿http,获取baidu网页

'''

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#AF_INET指定IPv4协议,SOCK_STREAM指定TCP协议
s.connect(('www.baidu.com', 80))
#连接指定IP及端口,参数是一个tuple


# 发送请求数据:
s.send('GET / HTTP/1.1\r\nHost: www.baidu.com\r\nConnection: close\r\n\r\n')
# 接收数据:
buffer = []
while True:
    # 每次最多接收1k字节:
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = ''.join(buffer)

s.close()
#关闭socket
header, html = data.split('\r\n\r\n', 1)
print header   #打印头信息

# 把接收的数据写入文件:
with open('baidu.html', 'wb') as f:
    f.write(html)
#baidu.html就保存到本地了

client与server通过TCP通信

server.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#server
import socket
import threading
import time

def tcplink(sock, addr):
    print 'Accept new connection from %s:%s...' % addr
    # addr是tuple ('127.0.0.1', 56610)
    sock.send('Welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if data == 'exit' or not data:
            break
        sock.send('Hello, %s!' % data)
    sock.close()
    print 'Connection from %s:%s closed.' % addr

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#创建TCP,IPv4的Socket
s.bind(('127.0.0.1', 6464))
#绑定端口
s.listen(5)
#监听端口,指定等待连接的最大数量5
print 'Waiting for connection...'
while True:
    sock, addr = s.accept()
    #接收一个新连接
    t = threading.Thread(target=tcplink, args=(sock, addr))
    #创建新线程处理TCP连接
    t.start()

client.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# client
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('127.0.0.1', 6464))
# 建立连接:
print s.recv(1024)
# 接收欢迎消息:
for data in ['Michael', 'Tracy', 'Sarah']:
    s.send(data)
    # 发送数据:
    print s.recv(1024)
s.send('exit')
s.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值