python socket编程(1)

socket()编程
由于socket模块中用到的属性很多,简化代码先使用
   
   
from socket import *
#正常不要使用*,依次导入需要的属性和方法
创建一个TCP/IP的套接字
   
   
tcpsock = socket(AF_INET,SOCK_STREAM)
创建一个UDP/IP的套接字
   
   
udpsock = socket(AF_INET,SOCK_DGRAM)
列举套接字内建方法
server: client:
bind()     绑定地址(ip/port)
listen()     开始监听
accept()     被动接受tcp客户端连接(阻塞式)
connect()       主动连接tcp服务器
connect_ex()     connect()的扩展版本,出错返回错误码,而不是抛出异常
公共使用 面向模块的函数 面向文件
recv()     接受tcp数据
send()    发送tcp数据
sendall()    完整发送tcp数据
sendto()    接收udp数据
sendto()    发送udp数据
getpeername()    接收到当前套接字远端的地址(tcp连接)
getsockname()    当前套接字地址
getsockopt()        返回指定套接字的参数
setsockopt()        设置指定套接字的参数
close()                 关闭
setblocking()        设置套接字的阻塞与非阻塞模式
settimeout()          设置超时时间
gettimeout()          得到超时时间
fileno()       套接字文件描述符
makefile()   创建一个与该套接字关联的文件对象

普遍的socket编程流程
伪代码:
   
   
ss = socket() #创建
ss.bind() #绑定地址
ss.listen() #监听
loop:
cs = ss.accept() #接收client连接
talk_loop:
cs.recv()/cs.send() #对话
cs.close() #关闭客户端socket
ss.close() #关闭server socket
来个简单的示例
功能,server 接收client的消息,在接收的消息上加上时间戳返回tcp
   
   
#!/usr/bin/python
from socket import *
from socket import ctime
 
HOST = ''
PORT = 5000
BUFSIZE = 1024
ADDR = (HOST,PORT)
 
server = socket(AF_INET,SOCK_STREAM)
server.bind(ADDR)
server.listen(5)
while True:
print 'waiting for client to connect'
conn,addr = server.accept()
print '....connected from',addr
while True:
data = conn.recv(BUFSIZE)
if not data:
break
conn.send('[%s] %s' % (ctime(),data))
conn.close()
server.close()
tcp客户端
伪代码(很容易理解):
   
   
cs = socket()
cs.connect()
loop:
cs.send()/cs.recv()
cs.close
TCP客户端
   
   
#!/usr/bin/python
from socket import *
 
HOST = '127.0.0.1'
PORT = 5000
BUFSIZE = 1024
ADDR = (HOST,PORT)
 
client = socket(AF_INET,SOCK_STREAM)
client.connect(ADDR)
 
while True:
data = raw_input('>')
if not data:
break
client.send(data)
data = client.recv(BUFSIZE)
if not data:
break
print data
client.close()
运行
server:



client:


udp不是面向连接的设置比tcp少
udpserver:
先是伪代码:
    
    
ss = socket()
ss.bind()
loop:
cs = ss.recvfrom()/ss.sendto()
ss.close()
udpserver.py:
    
    
#!/usr/bin/python
from socket import *
from time import ctime
HOST = ''
PORT = 5001
BUFSIZE = 1024
ADDR = (HOST,PORT)
 
server = socket(AF_INET,SOCK_DGRAM)
server.bind(ADDR)
while True:
print 'waiting for message...'
data,addr = server.recvfrom(BUFSIZE)
server.sendto('[%s] %s' % (ctime(),data),addr)
print '....received from and returned to :' , addr
server.close()
创建客户端就更简单了:
    
    
cs = socket()
loop:
cs.sendto()/cs.recvfrom()
cs.close()
本来不打算写了,还是写一下。。
    
    
#!/usr/bin/python
from socket import *
HOST = '127.0.0.1'
PORT = 5001
BUFSIZE = 1024
ADDR = (HOST,PORT)
client = socket(AF_INET,SOCK_DGRAM)
while True:
data = raw_input('>')
if not data:
break
client.sendto(data,ADDR)
data = client.recvfrom(BUFSIZE)
if not data:
break
print data
client.close()




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值