sockets模块
TCP服务器
#! /usr/bin/env python # -*- coding:utf-8 -*- import socket import os server = socket.socket() server.bind(( 'localhost' , 6969 )) #绑定被监听端口 server.listen( 5 ) #监听端口 while True : print ( "我要开始等电话了" ) conn, addr = server.accept() # 就是等待的意思 #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例 print ( "电话来了%s" % [conn, addr]) while True : data = conn.recv( 1024 ) if not data: print ( 'client is lost.' ) break # res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果 # with open('filename', 'r') as ret: #这两行就 可以用过来传输文件了。 # data = ret.read() print ( 'receive:' ,data) conn.send(data.upper()) server.close()
TCP客户端
#! /usr/bin/env python # -*- coding:utf-8 -*- import socket client = socket.socket() #声明socket类型,同时生成socket链接对象 client.connect(( 'localhost' , 6969 )) #localhost就是本机地址 while True : msg = input ( 'input msg >>:' ).strip() if len (msg) = = 0 : continue #检查msg的信息,防止无输入信息 #client.send(b"Hello, world!") #发送信息 client.send(msg.encode( 'utf-8' )) data = client.recv( 1024 ) #默认接受1024字节,就是1k # with open('filename', 'w') as ret: # 这两行就 可以用过来传输文件了。 # ret = data.write() print (data.decode()) client.close() #关闭端口
UDP 服务器
import socket def main(): # 1创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 2.绑定一个本地信息 localaddr = ( "localhost" , 6969 ) # 必须绑定自己电脑IP和port udp_socket.bind(localaddr) # 3.接收数据 while True : recv_data = udp_socket.recvfrom( 1024 ) # recv_data存储元组(接收到的数据,(发送方的ip,port)) recv_msg = recv_data[ 0 ] # 信息内容 send_addr = recv_data[ 1 ] # 信息地址 # 4.打印接收到的数据 # print(recv_data) print ( "信息来自:%s 内容是:%s" % ( str (send_addr),recv_msg.decode( "utf-8" ))) # 5.退出套接字 udp_socket.close() if __name__ = = "__main__" : main()
UDP 客户端
import socket def main(): # 创建一个套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True : # 从键盘获取数据 send_data = input ( "请输入要发送的数据:" ) # 退出函数 if send_data = = "exit" : break # 可以使用套接字收发数据,此时未绑定发送的端口号,系统每次会随机分配一个 # udp_socket.sendto("hahaha",对方的IP和port) # udp_socket.sendto(b"lalala123",("172.17.3.97",8080)) udp_socket.sendto(send_data.encode( "utf-8" ),( "localhost" , 6969 )) # 关闭套接字 udp_socket.close() if __name__ = = '__main__' : main()
天道酬勤 循序渐进 技压群雄