如何解决python socket udpserver重启后端口被占用的问题

关于goagent是什么以及如何安装,这里我不用多讲,网上有一堆资料。
由于最近google(不仅仅是google)一直被墙,搜资料、安装一些模块什么的时候总是很不爽,于是决定安装个goagent试试,看大家都那么极力推荐
安装过程还算顺利。
但是,问题来了,每次要使用goagent的时候都要在命令行上输入
python proxy.py
这就有点不方便了
再网上搜了一下如何设置自动启动
大致的方法就是,在yourGoagentPath/local/目录下,有一个叫addto-startup.py的文件,运行它即可,然后根据提示进行配置
但问题又来了,貌似重新启动的时候并没生效(关于这个问题我目前也没有去找原因,不知道解决办法),于是又只能在命令行上输入
python proxy.py
但这时候,出现了错误,如下:
bsndeMacBook-Pro:local Bsn$ python proxy.py
------------------------------------------------------
GoAgent Version
: 3.1.23 (python/2.7.5 gevent/1.0 pyopenssl/0.13)
Listen Address
: 127.0.0.1:8087
GAE Profile
Pac Server
: http://192.168.66.135:8086/proxy.pac
: file:///Users/Bsn/Applications/goagent-goagent-2ad74a4/local/proxy.pac
------------------------------------------------------
Traceback (most recent call last):
File "proxy.py", line 1620, in &module&
File "proxy.py", line 1587, in main
thread.start_new_thread(LocalProxyServer((common.PAC_IP, common.PAC_PORT), PACProxyHandler).serve_forever, tuple())
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 419, in __init__
self.server_bind()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", line 430, in server_bind
self.socket.bind(self.server_address)
File "&string&", line 1, in bind
socket.error: [Errno 48] Address already in use
Address already in use
然后,又在网上搜,大家的解决方案又是那么的一致,kill it!
好吧,那就找到使用8087端口的进程,干掉它,然后,它又神奇地复活了(大概是因为前面设置了自动启动地原因)
这时候我就纠结了。
想了好久,然后想到我不是设置了自动启动吗,那肯定有这样的配置,把这个删掉不就得了。
~/Library/LaunchAgents
/Library/LaunchDaemons/
/Library/LaunchAgents/
这三个目录下,看看有没相关地*.plist的文件,把它删掉即可
阅读(...) 评论()7330人阅读
SocketServer包对socket包进行了包装(封装),使得创建socket服务非常简单。
TCPServer+BaseRequestHandler
使用TCPServer和BaseRequestHandler编写socket服务的样例。
#-*- coding:utf-8 -*-
from SocketServer import TCPServer, BaseRequestHandler
import traceback
class MyBaseRequestHandlerr(BaseRequestHandler):
#从BaseRequestHandler继承,并重写handle方法
def handle(self):
#循环监听(读取)来自客户端的数据
while True:
#当客户端主动断开连接时,self.recv(1024)会抛出异常
#一次读取1024字节,并去除两端的空白字符(包括空格,TAB,\r,\n)
data = self.request.recv(1024).strip()
#self.client_address是客户端的连接(host, port)的元组
print &receive from (%r):%r& % (self.client_address, data)
#转换成大写后写回(发生到)客户端
self.request.sendall(data.upper())
traceback.print_exc()
if __name__ == &__main__&:
#telnet 127.0.0.1 9999
#主机名,可以是ip,像localhost的主机名,或&&
port = 9999
addr = (host, port)
#购置TCPServer对象,
server = TCPServer(addr, MyBaseRequestHandlerr)
#启动服务监听
server.serve_forever()
TCPServer+StreamRequestHandler
使用TCPServer和StreamRequestHandler编写socket服务的样例。StreamRequestHandler从BaseRequestHandler,并做了封装,使得读写数据更容易。
#-*- coding:utf-8 -*-
from SocketServer import TCPServer, StreamRequestHandler
import traceback
class MyStreamRequestHandlerr(StreamRequestHandler):
#继承StreamRequestHandler,并重写handle方法
#(StreamRequestHandler继承自BaseRequestHandler)
def handle(self):
while True:
#客户端主动断开连接时,self.rfile.readline()会抛出异常
#self.rfile类型是socket._fileobject,读写模式是&rb&,方法有
#read,readline,readlines,write(data),writelines(list),close,flush
data = self.rfile.readline().strip()
print &receive from (%r):%r& % (self.client_address, data)
#self.wfile类型是socket._fileobject,读写模式是&wb&
self.wfile.write(data.upper())
traceback.print_exc()
if __name__ == &__main__&:
#主机名,可以是ip,像localhost的主机名,或&&
port = 9999
addr = (host, port)
server = TCPServer(addr, MyStreamRequestHandlerr)
server.serve_forever()
ThreadingTCPServer+StreamRequestHandler=多线程socket
使用ThreadingTCPServer和StreamRequestHandler编写socket服务的样例。ThreadingTCPServer从ThreadingMixIn和TCPServer继承,实现多线程。
#-*- coding:utf-8 -*-
from SocketServer import ThreadingTCPServer, StreamRequestHandler
import traceback
class MyStreamRequestHandlerr(StreamRequestHandler):
def handle(self):
while True:
data = self.rfile.readline().strip()
print &receive from (%r):%r& % (self.client_address, data)
self.wfile.write(data.upper())
traceback.print_exc()
if __name__ == &__main__&:
#主机名,可以是ip,像localhost的主机名,或&&
port = 9999
addr = (host, port)
#ThreadingTCPServer从ThreadingMixIn和TCPServer继承
#class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
server = ThreadingTCPServer(addr, MyStreamRequestHandlerr)
server.serve_forever()
多线程socket效果:
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:113194次
积分:2036
积分:2036
排名:第7601名
原创:84篇
评论:79条
(1)(1)(1)(1)(1)(2)(2)(1)(4)(4)(2)(2)(1)(5)(4)(7)(2)(6)(11)(3)(7)(13)(7)页面导航:
→ 正文内容 Python Socket
Python使用Socket(Https)Post登录百度的实现代码
以前都是用一些高级模块,封装的比较好,今天尝试使用socket模块登录百度,弄了半天才弄好,主要由于百度在登陆页使用了https,我们需要对socket进行一定处理
登录百度,首先当然是先抓百度的登录包 ,由于是网页登录,最方便的自然是httpwatch了,我使用的测试账号是itiandatest1,密码是itianda,抓包结果:
代码如下: POST /?login HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: /?login&tpl=mn Accept-Language: zh-CN User-Agent: Mozilla/4.0 ( MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Alexa T BOIE9;ZHCN) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host:
Content-Length: 243 Connection: Keep-Alive Cache-Control: no-cache
登录包抓到了,下面开始写代码:
代码如下: import socket import ssl sock = ssl.wrap_socket(socket.socket())
ssl是专门用来处理https的模块,我们使用该模块的wrap_socket函数生成一个SSLSocket对象。 然后建立连接:
代码如下: sock.connect(('', 443))
这里需要注意的是https使用443端口,不是80。 之后发送数据:
代码如下: data = '''\ POST /?login HTTP/1.1 Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: /?login&tpl=mn Accept-Language: zh-CN User-Agent: Mozilla/4.0 ( MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Alexa T BOIE9;ZHCN) Content-Type: application/x-www-form-urlencoded Host:
Content-Length: 243 Connection: Keep-Alive Cache-Control: no-cache tpl_ok=&next_target=&tpl=mn&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=http%3A%2F%%2F&return_method=get&more_param=&return_type=&psp_tt=0&password=itianda&safeflg=0&isphone=tpl&username=itiandatest1&verifycode=&mem_pass=on\ ''' sock.sendall(data)
需要注意的是sendall之后不能调用shutdown方法。 其余部分就和普通的socket处理方式没什么差别了 :
代码如下: recv_data = sock.recv(8192) sock.close() print recv_data
由于我们只需要cookie信息,所以只接收少量数据就可以了。 登录成功的标志是服务器返回含有BDUSS的set-cookie:
代码如下: HTTP/1.1 200 OK Set-Cookie: BAIDUID=DB464E1EBA60D6AAB666:FG=1; max-age=; expires=Wed, 11-Dec-41 17:18:17 GMT; domain=.; path=/; version=1 P3P: CP=" OTI DSP COR IVA OUR IND COM " Date: Mon, 19 Dec :17 GMT Server: Apache P3P: CP=" OTI DSP COR IVA OUR IND COM " P3P: CP=" OTI DSP COR IVA OUR IND COM " P3P: CP=" OTI DSP COR IVA OUR IND COM " Set-Cookie: BAIDUID=26FD0CBC0239:FG=1; expires=Wed, 11-Dec-41 17:18:17 GMT; max-age=; path=/; domain=.; version=1 Set-Cookie: BAIDUID=26FD0CB1E4134CACEA29:FG=1; expires=Wed, 11-Dec-41 17:18:17 GMT; max-age=; path=/; domain=.; version=1 Set-Cookie: BDUSS=dTajkzWTFWR3hXT3Jsc09LdkNsZ011YlZka340VWtqNkZzbW0tUTdOUFp-aFpQQVFBQUFBJCQAAAAAAAAAAAouTSCLkioVaXRpYW5kYXRlc3QxAAAAAAAAAAAAAAAAAAAAAAAAAADgmoV5AAAAAOCahXkAAAAAuWZCAAAAAAAxMC42NS40NNlx707Zce9OWT; expires=Tue, 01 Jan :00 GMT; path=/; domain=. Set-Cookie: PTOKEN=16ba4a120f070f3cc759a6; expires=Tue, 01 Jan :00 GMT; path=/; domain=; HttpOnly Set-Cookie: STOKEN=fda961cefd3a; expires=Tue, 01 Jan :00 GMT; path=/; domain= Set-Cookie: USERID=9e630e60fb27466fa80e; expires=Tue, 01 Jan :00 GMT; path=/; domain=. Content-Type: text/charset=gbk Cache-Control: no-cache Pragma: no-cache Content-Encoding: none Content-Length: 850 Connection: close
OK,登陆成功。 本文来自: itianda's blog
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行推荐这篇日记的豆列
······NIO-Socket(server-and-client) jdk供的无阻塞I/O(NIO)有效解决了多线程服务器存在的 开销问题,但在使用上略显 Internet -Network 212万源代码下载-
&文件名称: NIO-Socket(server-and-client)& & [
& & & & &&]
&&所属分类:
&&开发工具: Java
&&文件大小: 162 KB
&&上传时间:
&&下载次数: 20
&&提 供 者:
&详细说明: jdk供的无阻塞I/O(NIO)有效解决了多线程服务器存在的线程开销问题,但在使用上略显得复杂一些。在NIO中使用多线程,主要目的已不是为了应对每个客户端请求而分配独立的服务线程,而是通过多线程充分使用用多个CPU的处理能力和处理中的等待时间,达到提高服务能力的目的。
client多线程请求server端,server接收client的名字,并返回Hello! +名字的字符格式给client。当然实际应用并不这么简单,实际可能是访问文件或者数据库获取信息返回给client。-jdk for non-blocking I/O (NIO), an effective solution to the problem of multi-threaded server thread overhead, but too complicated to use minor. To use multiple threads, the main purpose is not to respond to each client request to allocate a separate service thread with multiple CPU processing power and processing wait time, but fully multi-threaded so as to enhance service capabilities in the NIO purpose. This time in the NIO, to write an article blog to remember the things you learned. Or from the most simple Hello World, multi-threaded the client requests the server side, the server receiving the client
s name, and return to the Hello!+ The name of the character format to the client. Of course, the practical application is not so simple, the actual access to the file or database to obtain the information returned to the client. The non-blocking NIO What is the mystery?
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&解读NIO Socket非阻塞模式(server端和client端).doc
&[]:很好,推荐下载
&近期下载过的用户:
&相关搜索:
&输入关键字,在本站212万海量源码库中尽情搜索:
&[] - VOCAL(Vovida Open Communication Application Library)是一个开源代码通信软件,以IP网为核心,在Linux或Solaris操作系统上运行。提供VoIP电话服务,支持基于SIP的通信设备。本文介绍了VOCAL的系统架构,SIP基本呼叫流程和VOCAL的
&[] - Multiple client server using java and socket programing
Distributed client server concepts are used
&[] - Java网络编程NIO非阻塞通信(socket/UDP实例、简单聊天系统)
&[] - 用Java连接oracle数据库实现简单的查询、插入、删除和更新操作。
&[] - nio 的实现例子 里面有详细的中文注释 配合查询api 帮助你更好地学习nio 特点:非阻塞
&[] - 实现网络聊天的功能,采用Windows socket(或Java Socket)编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。服务器端要保存用户信息,可利用数据库来实现这一功能,需要建立用户信息数据库。在客户
&[] - 一个bookserver,通tcp/ip socket完成查询,修改数据库。
&[] - 本系统采用C/S结构,开发中利用了TCP/IP协议,多线程,socket编程等技术。在服务器监听多个客户端中使用多线程。系统中信息的发送和读取采用自定义的对象来传递。对于用户信息等内容利用MySql数据库进行存储。系统的主要模块为,用户注册模块,用户登录模块,用户添加好友和删除好友模块,好友聊天模块
&[] - 一个很好的 NIO+入门+-+IBM+教程
&[] - 《Python网络编程基础》英文版,可以作为各层次Python、Web和网络程序的开发人员的参考书,在实际工作中使用书中的技术,效果更佳。}

我要回帖

更多关于 python socket bind 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信