pythonsocket编程
① python socket编程中有没有 AF
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间内的进程间通信容,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页、QQ 聊天、收发 email 等等。
要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了。
② 用python进行socket编程老是报错error:[Errno 10061]怎么回事啊
出现Errno10061 是因为目标主机主动拒绝,连接不能建立。
这通常是因为试图连接到一个远程主机上不活动的服务,如没有服务器应用程序处于执行状态。
解决方法:
1)你先启动server,看是否可以正常启动。
2)因为是基于TCP的,所以你试试telnet可否链接到server上,格式为 telnet 127.0.0.1 5007 如果telnet没有找到的话,就配置下启动telnet。
3) 如果telnet没有成功的话,则看下是否允许python访问网络,在控制面板里配置下,如果不是要允许访问。
4)最后,服务端自己的监听地址和客户端书写的服务端地址形式必须要完全对应,或者服务端地址写成空字符串”“形式,表示所有可用地址。程序才能正常传输文件。
意思就是:
1.服务端和客户端要在一台主机上做测试的话,要不全写成"localhost"或者全写成"127.0.0.1"形式,要不全写成自己的内网IP或外网IP,如"192.168.0.10"形式;
2.不在同一个主机上的话,服务端本地地址不能写成"127.0.0.1"或者"localhost",而要写成自己的内网IP或外网IP形式。
3.最简单一种方法:服务端地址写成""形式。
③ python socket编程中listen和accept的区别
listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:
intlisten(int sockfd, int backlog)
参数sockfd
被listen函数作用的套接字,sockfd之前由socket函数返回。在被socket函数返回的套接字fd之时,它是一个主动连接的套接字,也就是此时系统假设用户会对这个套接字调用connect函数,期待它主动与其它进程连接,然后在服务器编程中,用户希望这个套接字可以接受外来的连接请求,也就是被动等待用户来连接。由于系统默认时认为一个套接字是主动连接的,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事。
参数backlog
这个参数涉及到一些网络的细节。进程处理一个一个连接请求的时候,可能还存在其它的连接请求。因为TCP连接是一个过程,所以可能存在一种半连接的状态,有时由于同时尝试连接的用户过多,使得服务器进程无法快速地完成连接请求。如果这个情况出现了,服务器进程希望内核如何处理呢?内核会在自己的进程空间里维护一个队列以跟踪这些完成的连接但服务器进程还没有接手处理或正在进行的连接,这样的一个队列内核不可能让其任意大,所以必须有一个大小的上限。这个backlog告诉内核使用这个数值作为上限。
毫无疑问,服务器进程不能随便指定一个数值,内核有一个许可的范围。这个范围是实现相关的。很难有某种统一,一般这个值会小30以内。
accept函数
摘要:accept()用来接受参数s的socket连接,它的函数原型是:
intaccept(int s,struct sockaddr * addr,int * addrlen)
服务程序调用accept函数从处于监听状态的流套接字s的客户连接请求队列中取出排在最前的一个客户请求,并且创建一个新的套接字来与客户套接字创建连接通道,如果连接成功,就返回新创建的套接字的描述符,以后与客户套接字交换数据的是新创建的套接字;如果失败就返回 INVALID_SOCKET。该函数的第一个参数指定处于监听状态的流套接字;操作系统利用第二个参数来返回新创建的套接字的地址结构;操作系统利用第三个参数来返回新创建的套接字的地址结构的长度。
④ python socket udp编程的小问题
从错误代码an
integer
is
required来看,需要提供一个整形。
要做的是改成
port0
=
21567,而不是
port0
=
’21567‘。
希望能帮到你,有疑问请追问!
⑤ 求完整的用python语言实现socket编程,完成数据的发送,接收转发的程序!!急!!!谢谢!!
看文档中的样例吧(底下前两个),稍微改一下就是你所想回要的答了。
http://docs.python.org/2/library/socket.html
⑥ python的socket编程问题
struct在unpack的时候用大端方式读取,先读一个B,也就是一个字节作为回类型,然后读一个H,也就是大答端的两字节作为版本,然后是大段的两字节作为ln什么的。
很多脚本语言都支持pack,unpack来序列化数据的,你要查一下具体的字符的含义。
⑦ 请问,我要用python语言实现socket编程,请问需要下载什么软件呢 急需啊~!!!!先谢谢了!
我从网上给你拷两个例子
服务器
#!/usr/bin/python
"USAGE:echoserver.py<port>"
,TCPServer
importsys,socket
classEchoHandler(BaseRequestHandler):
defhandle(self):
print"Clientconnected:",self.client_address
self.request.sendall(self.request.recv(2**16))
self.request.close()
iflen(sys.argv)!=2:
print__doc__
else:
TCPServer(('',int(sys.argv[1])),EchoHandler).serve_forever()
客户端
#!/usr/bin/python
"USAGE:echoclient.py<server><word><port>"
fromsocketimport*
importsys
iflen(sys.argv)!=4:
print__doc__
sys.exit(0)
sock=socket(AF_INET,SOCK_STREAM)
sock.connect((sys.argv[1],int(sys.argv[3])))
message=sys.argv[2]
messlen,received=sock.send(message),0
ifmesslen!=len(message):
print"Failedtosendcompletemessage"
print"Received:",
whilereceived<messlen:
data=sock.recv(32)
sys.stdout.write(data)
received+=len(data)
sock.close()
⑧ python中使用socket编程,如何能够通过UDP传递一个列表类型的数据
Python中的 list 或者 dict 都可以转成JSON字符串来发送,接收后再转回来。
首先
importjson
然后,把 list 或 dict 转成 JSON
json_string=json.mps(list_or_dict)
用socket发送过去,例如
s.sendto(json_string,address)
对方用socket接收,例如
json_string,addr=s.recvfrom(2048)
把JSON转成 list 或 dict
list_or_dict=json.loads(json_string)
-----------------------------------------------------
下面是个完整的例子:
client.py
#!/usr/bin/envpython
#-*-coding:UTF-8-*-
importsocket
importjson
address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
mylist=[1,2,3,4,5,6,7,8,9,10]
json_string=json.mps(mylist)
s.sendto(json_string,address)
s.shutdown(socket.SHUT_RDWR)
s.close()
server.py
#!/usr/bin/envpython
#-*-coding:UTF-8-*-
importsocket
importjson
address=('127.0.0.1',31500)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(address)
json_string,addr=s.recvfrom(2048)
mylist=json.loads(json_string)
printmylist
s.shutdown(socket.SHUT_RDWR)
s.close()
请先运行server.py,再运行client.py
⑨ Python中用socket编写服务器和客户端。。。
服务器端代码
while
1:
buf
=
s.recv(1024)
改成
while
1:
buf
=
conn.recv(1024)
看看能不能接收到信息
--------------
貌似你的服务端代码
俩个while
1
有点问题