TCP编程

####客户端####
#导入socket库
import socket
#创建一个socket。AF_INET指IPv4协议,如果要用IPv6则指定AF_INET6.SOCK_STREAM指定使用面向流的TCP协议
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#建立连接。80端口是Web服务的标准端口。SMTP服务是25端口,FTP服务是21端口。
s.connect(('www.sina.com.cn',80))
#发送数据
s.send('GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection: close\r\n\r\n')
#接收数据。接收数据时,调用recv(max)方法,一次最多接收指定的字节数,因此,在一个while循环中反复接收,直到recv()返回空数据,表示接收完毕,退出循环。
buffer = []
while True:
    #每次最多接收1k字节
    d = s.recv(1024)
    if d:
        buffer.append(d)
    else:
        break
data = ' '.join(buffer)
#关闭连接
s.close()
#把HTTP头和网页分离一下,把HTTP头打印出来,网页内容保存到文件
header,html = data.split('\r\n\r\n',1)
print header
#把接收的数据写入文件。
with open('sina.html','wb') as f:
    f.write(html)


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 closed.' % addr

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#监听端口
s.bind(('127.0.0.1',9999))
s.listen(5)
print 'Wating for connection...'
while True:
    #接受一个新的连接
    sock,addr = s.accept()
    #创建新线程来处理TCP连接
    t = threading.Thread(target=tcplink,args=(sock,addr))
    t.start()


'tcplink函数要放到前面,不然出错 - -。'
'服务器可能有多块网卡,可以绑定到某一块网卡的IP地址上,也可以用0.0.0.0绑定到所有的网络地址,'
'还可以用127.0.0.1绑定到本机地址。127.0.0.1是一个特殊的IP地址,表示本机地址,如果绑定到这个地址,'
'客户端必须同时在本机运行才能连接,也就是说,外部的计算机无法连接进来。'


'a socket example which send echo message to server.'

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 ['Michael', 'Tracy', 'Sarah']:
    # 发送数据:
    s.send(data)
    print s.recv(1024)
s.send('exit')
s.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值