1.使用同一个套接字进行收发数据
import socket
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
dest_ip = input("请输入对方的ip:")
dest_port = int(input("请输入对方的port:"))
send_data = input("请输入要发送的数据:")
udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
recv_data = udp_socket.recvfrom(1024)
print(recv_data)
udp_socket.close()
if __name__ == "__main__":
main()
2.案例:udp聊天
import socket
def send_msg(udp_socket):
"""发送消息"""
dest_ip = input("请输入对方的ip:")
dest_port = int(input("请输入对方的port:"))
send_data = input("请输入要发送的消息:")
udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
def recv_msg(udp_socket):
"""接收数据"""
recv_data = udp_socket.recvfrom(1024)
print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("", 7788))
while True:
send_msg(udp_socket)
recv_msg(udp_socket)
if __name__ == "__main__":
main()
3.案例:udp聊天升级—可以控制操作
import socket
def send_msg(udp_socket):
"""发送消息"""
dest_ip = input("请输入对方的ip:")
dest_port = int(input("请输入对方的port:"))
send_data = input("请输入要发送的消息:")
udp_socket.sendto(send_data.encode("utf-8"), (dest_ip, dest_port))
def recv_msg(udp_socket):
"""接收数据"""
recv_data = udp_socket.recvfrom(1024)
print("%s:%s" % (str(recv_data[1]), recv_data[0].decode("utf-8")))
def main():
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(("", 7788))
while True:
print("-----xxx聊天器-----")
print("1:发送消息")
print("2:接收消息")
print("0:退出系统")
op = input("请输入功能:")
if op == "1":
send_msg(udp_socket)
elif op == "2":
recv_msg(udp_socket)
elif op == "0":
break
else:
print("输入有误请重新输入...")
if __name__ == "__main__":
main()
4.tcp-客户端(client)
import socket
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = input("请输入要链接的服务器的ip:")
server_port = int(input("请输入要链接的服务器的port:"))
server_addr = (server_ip, server_port)
tcp_socket.connect(server_addr)
send_data = input("请输入要发送的数据:")
tcp_socket.send(send_data.encode("utf-8"))
tcp_socket.close()
if __name__ == "__main__":
main()
5.tcp-服务器(server)
import socket
def main():
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server_socket.bind(("", 7890))
tcp_server_socket.listen(128)
print("-----1----")
new_client_socket, client_addr = tcp_server_socket.accept()
print("-----2----")
print(client_addr)
recv_data = new_client_socket.recv(1024)
print(recv_data)
new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
new_client_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()
6.循环为多个客户端服务器
import socket
def main():
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server_socket.bind(("", 7890))
tcp_server_socket.listen(128)
while True:
print("等待一个新的客户端的到来...")
new_client_socket, client_addr = tcp_server_socket.accept()
print("一个新的客户端已经到来%s" % str(client_addr))
recv_data = new_client_socket.recv(1024)
print("客户端福送过来的请求是:%s" % recv_data.decode("utf-8"))
new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
new_client_socket.close()
print("已经服务器完毕。。。。")
tcp_server_socket.close()
if __name__ == "__main__":
main()
7.循环为多个客户端服务并且多次服务一个客户端
import socket
def main():
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server_socket.bind(("", 7890))
tcp_server_socket.listen(128)
while True:
print("等待一个新的客户端的到来...")
new_client_socket, client_addr = tcp_server_socket.accept()
print("一个新的客户端已经到来%s" % str(client_addr))
while True:
recv_data = new_client_socket.recv(1024)
print("客户端福送过来的请求是:%s" % recv_data.decode("utf-8"))
if recv_data:
new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
else:
break
new_client_socket.close()
print("已经为这个客户端服务完毕。。。。")
tcp_server_socket.close()
if __name__ == "__main__":
main()
8.案例:文件下载-client
import socket
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
dest_ip = input("请输入下载服务器的ip:")
dest_port = int(input("请输入下载服务器的port:"))
tcp_socket.connect((dest_ip, dest_port))
download_file_name = input("请输入要下载的文件名字:")
tcp_socket.send(download_file_name.encode("utf-8"))
recv_data = tcp_socket.recv(1024)
if recv_data:
with open("[新]" + download_file_name, "wb") as f:
f.write(recv_data)
tcp_socket.close()
if __name__ == "__main__":
main()
9.案例:文件下载-server
import socket
def send_file_2_client(new_client_socket, client_addr):
file_name = new_client_socket.recv(1024).decode("utf-8")
print("客户端(%s)需要下载文件是:%s" % (str(client_addr), file_name))
file_content = None
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as ret:
print("没有要下载的文件(%s)" % file_name)
if file_content:
new_client_socket.send(file_content)
def main():
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server_socket.bind(("", 7890))
tcp_server_socket.listen(128)
while True:
new_client_socket, client_addr = tcp_server_socket.accept()
send_file_2_client(new_client_socket, client_addr)
new_client_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()