天天看點

python socket

基于socket實作用戶端和伺服器發資訊

用戶端代碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket,os
obj = socket.socket()
obj.connect(("124.232.137.135", 9999))
ret_bysts = obj.recv(1024)
print(str(ret_bysts,encoding='utf8'))
while True:
    s = input("輸入發送的内容:")
    obj.sendall(bytes(str(s),encoding='utf8'))
伺服器端代碼

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
sk = socket.socket()
sk.bind(('124.232.137.135',9999))
sk.listen(5)
###使用者一連接配接就傳回歡迎界面
address = sk.accept()
address[0].sendall(bytes('歡迎登陸Fer FTP',encoding='utf8'))
while True:
    ret_bysts = address[0].recv(1024)
    cao = str(ret_bysts,encoding='utf8')
    print(cao)

      

基于socket實作用戶端和伺服器發檔案

 #!/usr/bin/env python

# -*- coding:utf-8 -*-

import socket,os,time

obj = socket.socket()

obj.connect(('127.0.0.1',9999))

ret_bysts = obj.recv(1024)

print(str(ret_bysts,encoding='utf8'))

#發送檔案大小

file_size = os.stat('a')

obj.sendall(bytes(str(file_size.st_size),encoding='utf8'))

obj.recv(1024)#解決粘包問題。接收伺服器端發來的ACK

with open('a','rb') as f:

    for i in f:

        obj.sendall(i)

f.close()

伺服器端代碼

#!/usr/bin/env python

import socket

sk = socket.socket()

sk.bind(('127.0.0.1',9999))

sk.listen(5)

###使用者一連接配接就傳回歡迎界面

conn,address = sk.accept()

conn.sendall(bytes('歡迎登陸Fer FTP',encoding='utf8'))

ret_bysts = conn.recv(1024)

cao = str(ret_bysts, encoding='utf8')

conn.sendall(bytes('ack', encoding='utf8'))

接收檔案大小

回複Ack給用戶端開始發檔案内容

s = int(cao)

p = 0

f = open('b.txt', 'wb')

while True:

    if p == s:

        break

    data = conn.recv(1024)

    f.write(data)

    p += len(data)