使用udp发送数据
import socket
def main():
# 创建一个套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 可以使用套接字收发数据
# udp_socket.sendto(内容, (IP, 端口))
# 发送的内容必须是byte类型,不能是str
# udp_socket.sendto("test_content", ('192.168.1.1', 8080))
# 绑定本地信息,一直使用7789端口发送
local_addr = ("", 7789)
udp_socket.bind(local_addr)
while True:
# 获取要发送的数据
send_data = input("请输入你要发送的数据")
udp_socket.sendto(send_data.encode("utf-8"), ('192.168.1.2', 8080))
# 关闭套接字
udp_socket.close()
if __name__ == "__main__":
main()
使用udp接收数据
from socket import *
# 创建一个套接字
udp_socket = socket(AF_INET, SOCK_DGRAM)
# 绑定本地的网络信息
local_addr = ("", 7778) # ip地址和端口号,IP一般不用谢写
udp_socket.bind(local_addr)
while True:
# 接收数据
recv_data = udp_socket.recvfrom(1024)
# 显示接收到的数据
# 显示接收到的数据
recv_msg = recv_data[0]
send_addr = recv_data[1]
print("%s:%s" % (str(send_addr), recv_msg.decode("utf-8"))) # linux用utf-8编码的,windows也用utf-8解码,windows用gbk编码的,linux用gbk解码
# 关闭套接字
udp_socket.close()
注意: 数据的发送和接收都是需要使用套接字的
单工:只能接收,不能发送;或者只能发送,不能接收
半双工:可以发送,可以接收,但是不能同时进行
全双工:可以同时发送和接收
tcp客户端
import socket
def main():
# 创建tcp的套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 链接服务器
# ver_port = int(input("请输入要连接的服务器port:"))
# server_addr = (server_ip, server_port)
tcp_socket.connect(('192.168.232.232', 7788))
while True:
# 发送数据
send_msg = input("请输入要发送的数据:")
if send_msg == "exit":
break
tcp_socket.send(send_msg.encode("utf-8"))
recv_data = tcp_socket.recv(1024)
print("%s" % recv_data.decode("utf-8"))
# 关闭套接字
tcp_socket.close()
if __name__ == "__main__":
main()
tcp服务器
import socket
def main():
# 创建套接字
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定ip和端口
tcp_server_socket.bind(("", 7788))
# listen使套接字变为被动连接
tcp_server_socket.listen(128)
while True:
# accept,等待客户端的链接
# 监听套接字负责等待新的客户端接入,产生的新的套接字负责为当前用户服务
client_socket, client_addr = tcp_server_socket.accept()
print("%s :已接入" % str(client_addr))
while True:
# 接收客户端发送的数据
# 如果recv解堵塞,那么有两种方式:
# 1.客户端发送过来数据
# 2.客户端调用了close
recv_data = client_socket.recv(1024)
if recv_data:
print("%s" % recv_data.decode("utf-8"))
client_socket.send("ok".encode("utf-8"))
else:
break
client_socket.close()
print("%s:已关闭" % str(client_addr))
tcp_server_socket.close()
if __name__ == "__main__":
main()