####客户端####
#导入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()