[Python]网络编程--socket入门
来源:互联网 发布:mac桌面软件 编辑:程序博客网 时间:2024/05/24 06:19
介绍:
#coding=utf-8'''笔记:套接字:套接字起源于20世纪79年代的加利福尼亚大学伯克利分校版本的Unix,就是我们常说的BSDunix。有的时候也叫“BSD套接字”。开始的时候被设计为一台主机应用间的通信,也就是进程间通信,也叫IPC。一般分为2种,基于文件型的和基于网络型的。AF:地址家族PF:协议家族合法端口号是0 到65535 '''#创建一个TCP/IP套接字 socket(socket_family, socket_type, protocol=0) #socket_family socket的类型 socket_type哪种方式传输tcp or udp import sockettcpSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建一个UDP/IP套接字udpSocket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)'''函数 描述服务器端套接字函数 s.bind() 绑定地址(主机,端口号对)到套接字s.listen() 开始 TCP 监听s.accept() 被动接受 TCP 客户的连接,(阻塞式)等待连接的到来客户端套接字函数s.connect() 主动初始化 TCP 服务器连接s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛异常公共用途的套接字函数s.recv() 接收 TCP 数据s.send() 发送 TCP 数据s.sendall() 完整发送 TCP 数据s.recvfrom() 接收 UDP 数据s.sendto() 发送 UDP 数据s.getpeername() 连接到当前套接字的远端的地址s.getsockname() 当前套接字的地址s.getsockopt() 返回指定套接字的参数s.setsockopt() 设置指定套接字的参数s.close() 关 闭套接字Blocking-Oriented Socket Methodss.setblocking() 设置套接字的阻塞与非阻塞模式s.settimeout() 设置阻塞套接字操作的超时时间s.gettimeout() 得到阻塞套接字操作的超时时间面向文件的套接字的函数 s.fileno() 套接字的文件描述符s.makefile() 创建一个与该套接字关连的文件'''
TCP服务端
#coding:utf-8#最简单的一个案例 一个server和一个client 的Tcp服务#客户端:'''客户端的运行流程:创建socket绑定端口开始循环监听接受客户端连接循环通信关闭客户端连接关闭socket'''#服务器端接受客户端的字符,并说一句话 import socketfrom time import ctime #定义几个参数,例如地址端口号等HOST = ''PORT = 8808 #这里是整形BUFFFERSIZE = 1024ADDR =(HOST,PORT)#print ADDR#创建并绑定tcpSockSer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcpSockSer.bind(ADDR)tcpSockSer.listen(10) while True: print 'The TCP Server is starting....',ctime() tcpSockClt,addr=tcpSockSer.accept() print 'The client is ',addr ,'----',ctime() print tcpSockClt.recv(BUFFFERSIZE) tcpSockClt.send("Server: I am a Server !") tcpSockClt.close()tcpSockSer.close()
TCP客户端
#coding:utf-8#python2.7'''客户端的逻辑创建socket连接服务器循环通信收发消息关闭socket'''import socketfrom time import ctimeHOST = '127.0.0.1'PORT = 8808BUFFERSIZE = 1024ADDR = (HOST,PORT)tcpSockClt=socket.socket(socket.AF_INET,socket.SOCK_STREAM)tcpSockClt.connect(ADDR)while True: print 'client is ready ...' tcpSockClt.send('Client: I am a Client!') data=tcpSockClt.recv(BUFFERSIZE) if not data: break print data tcpSockClt.close()