socket网络编程python_python学习笔记——socket网络编程(1)

假设我们已经有了客户/服务器,套接字和网络方面的基础,我们把这些概念带到python中来,我们用python中的socket模块来实现网络通信。

一,socket()模块函数

我们用socket()函数来创建套接字。

Socket(socket_family, socket_type,

protocol=0)

套接字家族可以使AF_UNIX或者AF_INET,套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM

,protocol一般不填默认为0.

比如一个TCP的套接字:

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

同样UDP的:

udpSock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

假如我们导入模块时用from socket import *

则可简化上面的代码。

二,套接字对象内建方法

三,建立TCP连接

首先建立服务器程序。

创建套接字,绑定套接字,开始监听,就是一个while循环一直监听有没有消息连接。

客户端程序。

创建套接字,连接,等待输入,发送,

结果我们在两个shell中演示。

下面是在Linux下的实现,就贴截图了。

四 建立UDP连接

服务器端程序:

# C:/Python26/code/socket_Userv.py

from socket import *

from time import ctime

HOST = ''

PORT = 21568

BUFSIZ = 1024

ADDR = (HOST,PORT)

udpSerSock = socket(AF_INET,SOCK_DGRAM)

udpSerSock.bind(ADDR)

while True:

print

'waiting for message...'

data,addr

= udpSerSock.recvfrom(BUFSIZ)

udpSerSock.sendto('[%s] %s' % (ctime(),data),addr)

print

'...received from and returned to :',addr

udpSerSock.close()

客户端程序:

# C:/Python26/code/socket_Uclnt.py

from socket import *

HOST = ''

PORT = 21568

BUFSIZ = 1024

ADDR = (HOST,PORT)

udpCliSock = socket(AF_INET,SOCK_DGRAM)

while True:

data =

raw_input('>')

if not

data:

break

udpCliSock.sendto(data,ADDR)

data,ADDR

= udpCliSock.recvfrom(BUFSIZ)

if not

data:

break

print

data

udpCliSock.close()

五,SocketServer模块

下面看看用SocketServer模块来实现TCP的服务器和客户端。

服务器端:

from SocketServer import (TCPServer as TCP,StreamRequestHandler

as SRH)

from time import ctime

HOST = ''

PORT = 21567

ADDR = (HOST,PORT)

class MyRequestHandler(SRH):

def

handle(self):

print '...connected from:',self.client_address

self.wfile.write('[%s] %s ' % (ctime(),self.rfile.readline()))

tcpServ= TCP(ADDR,MyRequestHandler)

print 'waiting for connection...'

tcpServ.serve_forever()

客户端:

from socket import *

HOST = 'localhost'

PORT = 21567

BUFSIZ = 1024

ADDR = (HOST,PORT)

while True:

tcpCliSock=socket(AF_INET,SOCK_STREAM)

tcpCliSock.connect(ADDR)

data=raw_input('>')

if not

data:

break

tcpCliSock.send('%s\r\n' % data)

data=tcpCliSock.recv(BUFSIZ)

if not

data:

break

print

data.strip()

tcpCliSock.close()

你可能感兴趣的:(socket网络编程python_python学习笔记——socket网络编程(1))