python之TCP编程

时间:2015-05-11 14:15:20   收藏:0   阅读:162

客户端编程

#-*- coding:utf8 -*-
import socket

#创建一个socket
#AF_INET指定使用IPv4协议,如果要用更先进的IPv6,就指定为AF_INET6。SOCK_STREAM指定使用面向流的TCP协议
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#建立连接
s.connect((‘www.sina.com.cn‘, 80))
#发送数据(http请求)
s.send(‘GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\n\r\n‘)
#接收数据
buffer = []
while True:
    #每次最多接受1k字节
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = ‘‘.join(buffer)
#关闭连接
s.close()
#分离http头和主体
header, html = data.split(‘\r\n\r\n‘, 1)
print header
#把接受到的数据写入文件
with open(‘D:\\sina.html‘, ‘wb‘) as f:
    f.write(html)

 

服务器编程

服务器端

#-*- coding:utf8 -*-
import socket, threading, time

def tcplink(sock, addr):
    print ‘Accept new connection from %s:%s...‘ %addr
    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‘ %addr

#创建socket
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()
    #创建新线程来处理TCP连接
    t = threading.Thread(target=tcplink, args=(sock,addr))
    t.start()

客户端

#-*- coding:utf8 -*-
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((‘127.0.0.1‘, 9999))
print s.recv(1024)
for data in [‘David‘, ‘Yt‘, ‘Amenda‘]:
    s.send(data)
    print s.recv(1024)
s.send(‘exit‘)
s.close()

 

2015-05-11

评论(0)
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!