UDP
UDP收发数据
注意:
udp接收方必须绑定端口,发送方不必绑定端口
import socket
u = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
u.bind(("192.168.182.130", 6666))
while True:
data = input("输入数据:")
if data == "ESC":
break
u.sendto(data.encode("utf8"), ('192.168.2.101', 8080))
rec_data = u.recvfrom(1024)
print("receive:{}".format(rec_data[0].decode("utf8")))
u.close()
TCP
TCP客户端基本实现
import socket
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_adrress = ("192.168.182.130", 55992)
tcp_socket.connect(server_adrress)
data = input("send:")
tcp_socket.send(data.encode("utf8"))
recv_data = tcp_socket.recv(1024)
print(recv_data)
tcp_socket.close()
if __name__ == '__main__':
main()
TCP服务器端基本实现
import socket
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(("192.168.182.130", 55992))
tcp_socket.listen(128)
while True:
new_client_socket, client_address = tcp_socket.accept()
while True:
recv_data = new_client_socket.recv(1024)
if recv_data:
if recv_data != "exit":
print("recv:{}".format(recv_data.decode("utf8")))
new_client_socket.send("received".encode("utf8"))
else:
break
else:
break
new_client_socket.close()
tcp_socket.close()
if __name__ == '__main__':
main()
注意
tcp服务器方必须绑定端口,客户端方一般不绑定端口
文件下载器TCP简单实现
客户端方
import socket
def main():
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_adrress = ("10.3.126.144", 5599)
tcp_client.connect(server_adrress)
data = input("input a file name to download:")
tcp_client.send(data.encode("utf8"))
recv_data = tcp_client.recv(1024)
if recv_data:
with open("recv" + data.split("\\")[-1], "wb") as f:
f.write(recv_data)
tcp_client.close()
if __name__ == '__main__':
main()
服务器方
import socket
import os
def main():
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_socket.bind(("10.3.126.144", 5599))
tcp_socket.listen(128)
while True:
new_client_socket, client_address = tcp_socket.accept()
while True:
recv_data = new_client_socket.recv(1024)
if recv_data:
if recv_data != "exit":
path = recv_data.decode("utf8")
print("recv:{}".format(path))
if os.path.exists(path):
print("文件传输中...")
with open(path, "rb") as f:
data = f.read()
new_client_socket.send(data)
else:
break
else:
break
else:
break
new_client_socket.close()
tcp_socket.close()
if __name__ == '__main__':
main()