一、什么是socket:
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)
socket和file的区别:
1.> file模块是针对某个指定文件进行【打开】【读写】【关闭】
2.>socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】
Python 提供了两个基本的 socket 模块。
第一个是 Socket,它提供了标准的 BSD Sockets API。
第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
socket Server端:
importsocket
s= socket.socket(socket.AF_INET,socket.SOCK_STREAM) #创建套接字,定义socket类型,网络通信,TCP
s.bind(('localhost',8880)) #绑定套接字到本地IP与端口
s.listen(5) #开始监听TCP连接
whileTrue:print "waiting....."conn,addr= s.accept() #接受TCP连接,并返回新的套接字与IP地址
print'Connected by',addr #输出客户端的IP地址
client_data = conn.recv(1024) #接收传来的数据
printclient_data
conn.send("hello,we are you server !!!") #发送给对方数据
conn.close() #传输完毕后,关闭套接字
socket Client端
importsocket
s= socket.socket() #创建套接字
s.connect(('localhost',8880)) #连接远端地址,这里为server端的ip和端口
s.send("we are you client") #发送给server端
server_data = s.recv(1024) #接收server端信息
printserver_data
s.close()#关闭连接
server端importsocket
ip_port= ('127.0.0.1',8888)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)
s.bind(ip_port)whileTrue:
data= s.recv(1024)printdata-------------------------------------------------------------
#client端
importsocket
ip_port= ('127.0.0.1',9999)
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)whileTrue:
inp= raw_input('data:').strip()if inp == 'exit':breaks.sendto(inp,ip_port)
s.close()
UDP Demo
使用web访问server端socket.
访问地址:http://localhost:8002
importsocketdefmain():#创建socket对象
sock =socket.socket(socket.AF_INET, socket.SOCK_STREAM)#监听端口
sock.bind(('127.0.0.1',8002))#开始监听,
sock.listen(5)whileTrue:#阻塞,deng 。。。。
#直到有请求连接
print '....'connection, address=sock.accept()#connection,代表客户端socket对象
#address,客户端IP地址
#handle_request(connection)
buf = connection.recv(1024)printbuf
connection.send("HTTP/1.1 200 OK\r\n\r\n")
connection.send("Hello, World")
connection.close()if __name__ == '__main__':