python socket实例
1.客户端向服务端发送
1 2 3 4 5 6 7 8 9 | #coding:utf-8 '''客户端''' import socket khd = socket.socket() #声明socket类型,同时生产socket连接对象 khd.connect(( 'localhost' , 2345 )) #连接 khd.send( '应用' ) data = khd.recv( 1024 ) print ( "recv:" ,data) khd.close() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #coding:utf-8 '''服务端''' import socket fuwud = socket.socket() #()内不写东西的话,代表第一个地址簇AF.INET fuwud.bind(( 'localhost' , 2345 )) #绑定要监听端口 fuwud.listen( 5 ) #监听 print "等待中。。。。" conn,addr = fuwud.accept() #等数据进来<br>#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址addr对方的地址 print conn,addr print '开始了!' data = conn.recv( 1024 ) print "recv:" ,data conn.send(data.upper()) fuwud.close() |
先运行服务端再运行客户端
结果:
等待中。。。。
<socket._socketobject object at 0x021BCED8> ('127.0.0.1', 64335) 这里的端口64335是随机的。
开始了!
recv: 应用
注:khd.send(b'holle,world') 这里的byci只解释acssii的数据,发送中文不用添加b
2.服务器接受客户端发来的4次消息后,自动断开。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #coding:utf-8 '''服务端''' import socket fuwud = socket.socket() fuwud.bind(( 'localhost' , 2345 )) #绑定要监听端口 fuwud.listen( 5 ) #监听 print "等待中。。。。" while True : conn,addr = fuwud.accept() #等数据进来 #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址 print conn,addr print '开始了!' c = 0 while True : data = conn.recv( 1024 ) print "recv:" ,data conn.send(data.upper()) if c> 4 : #从客户端接受4次 ,服务器端自动断开。 break c = c + 1 print c fuwud.close() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #coding:utf-8 '''客户端''' import socket khd = socket.socket() #声明socket类型,同时生产socket连接对象 khd.connect(( 'localhost' , 2345 )) #连接 while True : khd_data = raw_input ( '>>:' ) if len (khd_data) = = 0 : continue #send不能发送空值 khd.send(khd_data) data = khd.recv( 1024 ) print ( "recv:" ,data) khd.close() |
3.服务器端可以实现接受多个线程的信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #coding:utf-8 '''服务端''' import socket fuwud = socket.socket() fuwud.bind(( 'localhost' , 2345 )) #绑定要监听端口 fuwud.listen( 5 ) #监听 print "等待中。。。。" while True : conn,addr = fuwud.accept() #等数据进来 #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址 print conn,addr print '开始了!' c = 0 while True : data = conn.recv( 1024 ) print "recv:" ,data conn.send(data.upper()) c = c + 1 if c> 4 : break print c fuwud.close() |
运行多个客户端。
1 2 3 4 5 6 7 8 9 10 11 12 | #coding:utf-8 '''客户端''' import socket khd = socket.socket() #声明socket类型,同时生产socket连接对象 khd.connect(( 'localhost' , 2345 )) #连接 while True : khd_data = raw_input ( '>>:' ) if len (khd_data) = = 0 : continue khd.send(khd_data) data = khd.recv( 1024 ) print ( "recv:" ,data) khd.close() |
4.服务器、客户端实现系统操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #coding:utf-8 '''服务端''' import os import socket fuwud = socket.socket() fuwud.bind(( 'localhost' , 2345 )) #绑定要监听端口 fuwud.listen( 5 ) #监听 print "等待中。。。。" while True : conn,addr = fuwud.accept() #等数据进来 #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址 print conn,addr print '开始了!' c = 0 while True : data = conn.recv( 1024 ) print "recv:" ,data res = os.popen(data).read() conn.send(res) c = c + 1 if c> 4 : break print c fuwud.close() |
1 2 3 4 5 6 7 8 9 10 11 12 | #coding:utf-8 '''客户端''' import socket khd = socket.socket() #声明socket类型,同时生产socket连接对象 khd.connect(( 'localhost' , 2345 )) #连接 while True : khd_data = raw_input ( '>>:' ) if len (khd_data) = = 0 : continue khd.send(khd_data) data = khd.recv( 1024 ) print ( "recv:" ,data) khd.close() |
5.服务端:
sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)
参数一:地址簇
socket.AF_INET IPv4(默认)
socket.AF_INET6 IPv6
socket.AF_UNIX 只能够用于单一的Unix系统进程间通信
参数二:类型
socket.SOCK_STREAM 流式socket , for TCP (默认)
socket.SOCK_DGRAM 数据报式socket , for UDP
socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
socket.SOCK_SEQPACKET 可靠的连续数据包服务
参数三:协议
0 (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议
具体参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html
1 2 3 4 5 6 7 8 9 10 11 | import socket server = socket.socket(AF_INET,sock.SOCK_STREAM) server.bind(localhost, 9999 ) 绑定端口监听 server.listen() while true: #可以接受新的链接 conn,addr = server.accept() #阻塞 while true: data = conn.recv( 8192 ) #recv默认是阻塞的 if not data: break #避免客户端断开,conn.recv收到的是空数据 conn.send(data.upper()) #如果发送出去 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步