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()
天道酬勤 循序渐进 技压群雄
浙公网安备 33010602011771号