Follow along with the video below to see how to install our site as a web app on your home screen.
Not: This feature may not be available in some browsers.
Evet, veriler yalnızca byte olarak gidebiliyor. O yüzden string değerleri encode ettim zaten.Öncelikle Sağolun & Çok Teşekkür Ederim. Bir Kaç Sorum Olacak
Yorum Satırları İle Kodu Açıklama Şansınız Var mı ?
Veriler Byte Olarak Gidiyor Sanırım Değil mi ?
import socket
import os
import time
class Client(socket.socket):
def __init__(self):
# socket sınıfı miras alınır. İletişimin ipv4 ve tcp kullanacağı belirtilir.
super().__init__(socket.AF_INET,socket.SOCK_STREAM)
self.connect(("localhost",5665))
time.sleep(5)
self.send_file("server.py",64)
def read_file(self,file,buf):
# Dosya ismi ve dosya boyutu alınır.
self.file_name, self.file_size =...
from socket import *
import sys
data = sys.argv[3]
connec = socket(AF_INET,SOCK_STREAM)
connec.connect((sys.argv[1],sys.argv[2]))
connec.send(data)
print(connec.recv(1024).encode("utf-8")
örneğin uzak ağ bir pcde a.png diye bir dosya var onu başka bir pcye göndermek istiyorum nasıl yapabilirmPython:from socket import * import sys data = sys.argv[3] connec = socket(AF_INET,SOCK_STREAM) connec.connect((sys.argv[1],sys.argv[2])) connec.send(data) print(connec.recv(1024).encode("utf-8")
2dk örnek bir şablon çıkardım genel mantık bu dosya gönderi içim falanda for loop alır file read edip aynı şekilde yollarsınız.
import socket
import os
import time
class Client(socket.socket):
def __init__(self):
super().__init__(socket.AF_INET,socket.SOCK_STREAM)
self.connect(("localhost",5665))
time.sleep(5)
self.send_file("server.py",64)
def read_file(self,file,buf):
self.file_name, self.file_size = file.split("\\")[-1], os.stat(file)[6]
with open(file,"rb") as file_event:
for i in range(int((self.file_size)/buf)+1):
yield file_event.read(buf)
def send_file(self,file,buf):
for i in self.read_file(file,buf):
self.send(f"{buf}|{self.file_name}|".encode("utf-8")+i)
Client()
import socket
import os
class Server(socket.socket):
def __init__(self):
super().__init__(socket.AF_INET,socket.SOCK_STREAM)
self.bind(("localhost",5665))
self.listen(1)
self.listen_clients()
def split_bytes(self):
bytes = ""
while True:
byte = self.conn.recv(1)
if byte == b"|":
break
else:
bytes += byte.decode()
return bytes
def listen_clients(self):
self.conn, addr = self.accept()
print(f"{addr[0]} connected!")
while True:
buff = self.split_bytes()
file_name = self.split_bytes()
received_filebytes = self.conn.recv(int(buff))
print(buff,file_name,received_filebytes)
Server()
Öncelikle Sağolun & Çok Teşekkür Ederim. Bir Kaç Sorum OlacakBen şöyle bir şey yapardım:
Python:import socket import os import time class Client(socket.socket): def __init__(self): super().__init__(socket.AF_INET,socket.SOCK_STREAM) self.connect(("localhost",5665)) time.sleep(5) self.send_file("server.py",64) def read_file(self,file,buf): self.file_name, self.file_size = file.split("\\")[-1], os.stat(file)[6] with open(file,"rb") as file_event: for i in range(int((self.file_size)/buf)+1): yield file_event.read(buf) def send_file(self,file,buf): for i in self.read_file(file,buf): self.send(f"{buf}|{self.file_name}|".encode("utf-8")+i) Client()
Python:import socket import os class Server(socket.socket): def __init__(self): super().__init__(socket.AF_INET,socket.SOCK_STREAM) self.bind(("localhost",5665)) self.listen(1) self.listen_clients() def split_bytes(self): bytes = "" while True: byte = self.conn.recv(1) if byte == b"|": break else: bytes += byte.decode() return bytes def listen_clients(self): self.conn, addr = self.accept() print(f"{addr[0]} connected!") while True: buff = self.split_bytes() file_name = self.split_bytes() received_filebytes = self.conn.recv(int(buff)) print(buff,file_name,received_filebytes) Server()
Lokal ağda internet bağlantısı kurmak için local ip adreslerini kulanmanız yeterli olacaktır. Public ip adresleri için de server için modemden port açmalısınız.
Evet, veriler yalnızca byte olarak gidebiliyor. O yüzden string değerleri encode ettim zaten.Öncelikle Sağolun & Çok Teşekkür Ederim. Bir Kaç Sorum Olacak
Yorum Satırları İle Kodu Açıklama Şansınız Var mı ?
Veriler Byte Olarak Gidiyor Sanırım Değil mi ?
import socket
import os
import time
class Client(socket.socket):
def __init__(self):
# socket sınıfı miras alınır. İletişimin ipv4 ve tcp kullanacağı belirtilir.
super().__init__(socket.AF_INET,socket.SOCK_STREAM)
self.connect(("localhost",5665))
time.sleep(5)
self.send_file("server.py",64)
def read_file(self,file,buf):
# Dosya ismi ve dosya boyutu alınır.
self.file_name, self.file_size = file.split("\\")[-1], os.stat(file)[6]
with open(file,"rb") as file_event:
for i in range(int((self.file_size)/buf)+1):
# içerisinde her biri buf uzunluğunda dosya verisi bulunan bir iterator oluşturulur.
# for döngüsü kullanılırken dosya verileri sırayla alınır.
yield file_event.read(buf)
def send_file(self,file,buf):
for i in self.read_file(file,buf):
# Gönderilecek verinin uzunluğu, gönderilen dosyanın ismi ve dosyanın veri parçacığı servera gönderilir.
# Gönderilecek verinin uzunluğunun gönderilmesinin sebebi serverin ne kadar uzunlukta tcp mesajı okuyacağını belirtmektir.
self.send(f"{buf}|{self.file_name}|".encode("utf-8")+i)
Client()
import socket
import os
class Server(socket.socket):
def __init__(self):
super().__init__(socket.AF_INET,socket.SOCK_STREAM)
# Clientle aynı şekilde sınıf miras alınır.
# localhostun 5665 portuna bağlanılır.
self.bind(("localhost",5665))
# Aynı anda en fazla 1 client olacak şekilde port dinlenmeye başlanır.
self.listen(1)
self.listen_clients()
def split_bytes(self):
bytes = ""
while True:
# Bayt "|" olana kadar bayt bayt tcp mesajı dinlenir.
byte = self.conn.recv(1)
if byte == b"|":
break
else:
# Bayt "|" olana kadar okunan baytlar bytes değişkenine kaydedilir.
bytes += byte.decode()
return bytes
def listen_clients(self):
# Client bağlantısı beklenir.
self.conn, addr = self.accept()
print(f"{addr[0]} connected!")
while True:
buff = self.split_bytes() # Mesajın uzunluğu alınır.
file_name = self.split_bytes() # Dosya adı alınır
received_filebytes = self.conn.recv(int(buff)) # Önceden alınan veri uzunluğu kadar veri dinlenir. Bunun yapılmasının sebebi tcp mesajlarının dinamik olmasını sağlamaktır.
print(buff,file_name,received_filebytes)
Server()
Çok Teşekkür Ederim Çok Yardımcı OldunuzEvet, veriler yalnızca byte olarak gidebiliyor. O yüzden string değerleri encode ettim zaten.
Client tarafı:
Python:import socket import os import time class Client(socket.socket): def __init__(self): # socket sınıfı miras alınır. İletişimin ipv4 ve tcp kullanacağı belirtilir. super().__init__(socket.AF_INET,socket.SOCK_STREAM) self.connect(("localhost",5665)) time.sleep(5) self.send_file("server.py",64) def read_file(self,file,buf): # Dosya ismi ve dosya boyutu alınır. self.file_name, self.file_size = file.split("\\")[-1], os.stat(file)[6] with open(file,"rb") as file_event: for i in range(int((self.file_size)/buf)+1): # içerisinde her biri buf uzunluğunda dosya verisi bulunan bir iterator oluşturulur. # for döngüsü kullanılırken dosya verileri sırayla alınır. yield file_event.read(buf) def send_file(self,file,buf): for i in self.read_file(file,buf): # Gönderilecek verinin uzunluğu, gönderilen dosyanın ismi ve dosyanın veri parçacığı servera gönderilir. # Gönderilecek verinin uzunluğunun gönderilmesinin sebebi serverin ne kadar uzunlukta tcp mesajı okuyacağını belirtmektir. self.send(f"{buf}|{self.file_name}|".encode("utf-8")+i) Client()
Server tarafı:
Python:import socket import os class Server(socket.socket): def __init__(self): super().__init__(socket.AF_INET,socket.SOCK_STREAM) # Clientle aynı şekilde sınıf miras alınır. # localhostun 5665 portuna bağlanılır. self.bind(("localhost",5665)) # Aynı anda en fazla 1 client olacak şekilde port dinlenmeye başlanır. self.listen(1) self.listen_clients() def split_bytes(self): bytes = "" while True: # Bayt "|" olana kadar bayt bayt tcp mesajı dinlenir. byte = self.conn.recv(1) if byte == b"|": break else: # Bayt "|" olana kadar okunan baytlar bytes değişkenine kaydedilir. bytes += byte.decode() return bytes def listen_clients(self): # Client bağlantısı beklenir. self.conn, addr = self.accept() print(f"{addr[0]} connected!") while True: buff = self.split_bytes() # Mesajın uzunluğu alınır. file_name = self.split_bytes() # Dosya adı alınır received_filebytes = self.conn.recv(int(buff)) # Önceden alınan veri uzunluğu kadar veri dinlenir. Bunun yapılmasının sebebi tcp mesajlarının dinamik olmasını sağlamaktır. print(buff,file_name,received_filebytes) Server()