Python支持socket进行编程,其API跟C中的大同小异。
TCP方式编程支持server/client方式
一、TCP方式
server 端
server端的socket一般流程是这样:
1 建立一个socket(可以选择socket类型INET,UNIX等,以及连接方式TCP/UDP)
2 <span style="font-family: Arial, Helvetica, sans-serif;">使用bind公开一个端口,使得client可以方便连接
3 设置一个listen队列的大小
4 进入一个无限循环,在此无限循环中,使用accept函数来等待客户连接,此函数返回一个新的socket, 对应于客户端的socket,建立通信信道。对socket的处理一般放在外部单独的函数中(并发)
5 通过send()/recv()来对socket进行读写操作</span>
client端
1 建立一个新的socket
2 使用connect函数与远程主机获得连接
3 在此socket上进行I/O操作
服务器端基本代码如下:
def tcpServer():
srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM)
srvsock.bind(('', 9527))
srvsock.listen(5)
while True:
clisock, (remoteHost, remotePort) = srvsock.accept()
print "[%s:%s] connected" % (remoteHost, remotePort)
#do something on the clisock
clisock.close()
if __name__ == "__main__":
tcpServer()
客户端基本代码如下:
def tcpClient():
clisock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clisock.connect(('localhost', 9527))
#I/O on this clisock
#clisock.send("")
#dat = clisock.recv(len)
print dat
if __name__ == "__main__":
tcpClient()
二、UDP方式
Server端
1 建立数据报形式的socket
2 公开一个端口,一边客户端连接
3 开始接收数据
客户端
1 新建一个数据报socket
2 收发数据
Server端基本代码
def udpServer():
address = ('', 9527)
srvsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
srvsock.bind(address)
#data,addr = srvsock.recvfrom(2048)
if __name__ == "__main__":
udpServer()
客户端基本代码
def udpClient():
address = ('localhost', 9527)
clisock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#clisock.sendto(data, address)
if __name__ == "__main__":
udpClient()
三、总结
- TCP与UDP的差异就是在创建socket的时候,一个采用SOCK_STREAM,一个采用SOCK_DGRAM
- TCP的server方式比UDP的server方式多一行代码listen
- send与sendto,recv与recvfrom的区别,与c语言相同。