python 如何建立socket长连接

Python012

python 如何建立socket长连接,第1张

#coding=gbk

'''''

socket 给百度发送http请求

连接成功后,发送http的get请求,所搜索功能

'''

import socket

import sys

import time

if __name__=='__main__':

#创建套接字

try :

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

except socket.eorror,e:

print 'socket false:%s'%e

print 'socket ...'

#连接百度ip

try :

sock.connect(('220.181.111.148',80))

except socket.error,e:

print 'connect false %s'%e

sock.close()

print 'connect ...'

#发送百度首页面请求并且保持连接

try :

print 'send start...'

str='GET / HTTP/1.1\r\nHost:www.baidu.com\r\nConnection:keep-alive\r\n\r\n'

sock.send(str)

except socket.eorror,e:

print 'send false'

sock.close()

data=''

data = sock.recv(1024)

while (1): '''''如何判断数据接收完毕,在发送http 最前端,

包含发送数据文件大小属性Content-Length,

用字符匹配方式取得文件大小,

同过大小判断是否接收完毕。

'''

print data

beg = data.find('Content-Length:',0,len(data))

end = data.find('Content-Type:',0,len(data))

print beg

print end

if(beg == end):

print 'connecting closed'

break

num = long(data[beg+16:end-2])

print num

nums = 0

while (1):

data=sock.recv(1024)

print data

nums +=len(data)

if(nums >= num):

break

word = raw_input('please input your word----->')

str='''''GET /s?wd=''' + word + ''''' HTTP/1.1

Host:www.baidu.com

Connection: Keep-Alive

'''

print str

sock.send(str)

data = ''

data = sock.recv(1024)

sock.close()

print data

长连接就是建立TCP连接后,一直保持这个连接,一般会中间彼此发送心跳来确认对应的存在,中间会做多次业务数据传输,一般不会主动断开连接。 短连接一般指建立连接后,做一些操作 如:http请求,然后就关掉这个连接。所以就做短连接。

conn本来 就已经被你定义成了 函数, conn.ping()当然不存在了。而且你要的数据库连接c,还被手动关闭了。我觉得有两点

1. 按照你这个脚本的情况,你用一次,就新建一个数据库连接问题应该不大。

2. 要保持使用一个连接的话。把c作全局变量 c=MySQLdb.connect(user="root",passwd="12345",host="localhost",db="yingtest")

使用的时候,直接用c但是不要close,当然要先判断这个连接是否已经断开了,如是再重新连一次。

或者把连接放到一个连接池里面,用的时候直接去连接池里面取。连接池可以看看 DBUtils模块

你说的conn.ping() 看看是不是在c里面,c=MySQLdb.connect(user="root",passwd="12345",host="localhost",db="yingtest")就是这个对象里面,看看有没有判断连接是否断开的方法。 因为没用过 MySQLdb模块。