使用python中的socket實現伺服器和客戶端,並完成圖片的傳輸
socket伺服器程式碼:
- import socket
- import os
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.bind(address) #將本地地址與一個socket繫結在一起
- sk.listen(3) #最多允許有3個客戶稱呼
- print('waiting........ ')
- BASE_DIR = os.path.dirname(os.path.abspath(__file__)) #26:11,當前目錄
- while1:
- conn,addr = sk.accept()
- while1:
- # client = conn
- data = conn.recv(1024) #緩衝區大小,接收檔案的個數 第一次獲取請求
- # client.send("HTTP/1.1 200 OK\r\n\r\n".encode("utf8"))
- # client.send("<h1 style='color:red'>Hello,yuan</h1>".encode("utf8"))
- cmd,filename,filesize=str(data,'utf8'
- #filesize = os.stat(data)
- path = os.path.join(BASE_DIR,'MNIST_80',filename)
- filesize=int(filesize)
- f = open(path,'ab')
- has_receive=0
- while has_receive!=filesize:
- data=conn.recv(1024)
- f.write(data)
- has_receive+=len(data)
- f.close()
socket客戶端程式碼:
- import socket
- import os
- sk = socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.connect(address)
- BASE_DIR = os.path.dirname(os.path.abspath(__file__))
- whileTrue:
- inp=input('>>>>>>>>') #post|11.png
- cmd,path=inp.split('|') #拿到post,以及檔案11.jpg
- path=os.path.join(BASE_DIR,path)
- filename = os.path.basename(path)
- file_size = os.stat(path).st_size
- file_info='post|%s|%s'%(filename,file_size) #split獲取字串的資訊 以此方式打包,依次為 cmd/name/size
- sk.sendall(bytes(file_info,'utf8')) #第一次傳送請求,不是具體內容,而是先發送資料資訊
- f = open(path,'rb')
- has_sent=0
- while has_sent!=file_size:
- data = f.read(1024)
- sk.sendall(data) #傳送真實資料
- has_sent+=len(data)
- f.close()
- print('上傳成功')
在socket上,完全沒有問題,獲取的資料,都為unicode,直接寫入到檔案裡,如果讀取大小 設定充足的話,就會將圖片讀取出來。但是,用同樣的一張圖,從微信小程式傳送過來,會新增上一些其他資訊,直接讀取,就沒有辦法將圖片讀取出來了。 資料傳送的時候,先轉換成bytes檔案,接收的時候再轉化為str,才能識別文字資訊。小程式這到底怎麼搞啊。?
下面是我,修改的更為簡單的socket伺服器。。
- import socket
- import os
- sk=socket.socket()
- print(sk)
- address=('127.0.0.1',8000)
- sk.bind(address) #將本地地址與一個socket繫結在一起
- sk.listen(3) #最多允許有3個客戶稱呼
- print('waiting........ ')
- BASE_DIR = os.path.dirname(os.path.abspath(__file__)) #26:11,當前目錄
- while1:
- conn,addr = sk.accept()
- while1:
- filename = '123456789.jpg'
- path = os.path.join(BASE_DIR,'MNIST_80',filename)
- f = open(path,'ab')
- data=conn.recv(50000)
- f.write(data)
- f.close()
- print(data) #圖片資料
- #print(type(data))
相關推薦
使用python中的socket實現伺服器和客戶端,並完成圖片的傳輸
socket伺服器程式碼:import socket import os sk=socket.socket() print(sk) address=('127.0.0.1',8000) sk.bind(address) #將本地地址與一個socket繫結在一起sk.listen(3)
使用python中的socket實現伺服器和客戶端,並完成圖片的傳輸。
socket伺服器程式碼:import socket import os sk=socket.socket() print(sk) address=('127.0.0.1',8000) sk.bind(address) #將本地地址與一個socket繫結在一起 sk.
Socket通訊實現伺服器和客戶端對話
廣域網和區域網 介紹socket通訊前我們先介紹一下廣域網與區域網的概念。區域網簡稱LAN,是指在某一區域幾臺計算機組成的計算機組,區域網是封閉的,區域網經常採用共享通道,即共用同一條電纜。廣域網簡稱WAN,是一種跨越大的,地域性的地區性網路集合廣域網包含大大小
在Android上實現SSL握手,實現伺服器和客戶端之間Socket互動
public class MySSLSocket extends Activity { private static final int SERVER_PORT = 50030;//埠號 private static final String SERVER_IP = "218.206.17
在java網路程式設計中實現伺服器和客戶端一對一的聊天
如果有多個客戶端接入,都可以傳送訊息給伺服器,但伺服器只和最後一個客戶聊天。,如果要實現群聊的話,只要把所有的socket儲存到集合中,有客戶輸入時遍歷socket得到輸出流並把訊息廣播給各個客戶端就行了。 四個讀寫的執行緒類都是一樣的,可以進行封裝,這裡就不封裝了。 Se
C#實現伺服器和客戶端之間通訊
TCP 套接字程式設計 伺服器端實現步驟: 1、使用Socket類建立套接字。 2、利用Bind方法將建立的套接字繫結到指定的地址結構。 3、利用Listen方法設定套接字為監聽模式,使得伺服器進入被動開啟狀態。 4、接受客戶端的連線請求。 5、接收、應答客戶端的資料請求
java實現伺服器和客戶端之間的檔案傳輸
實現思路 一、客戶端發文件:首先建立和伺服器的連線,然後我們通過IO流來實現資料的傳輸,步驟: 1、通過伺服器的IP地址和埠號實現和伺服器的連線(這裡不要忘記先開伺服器哦) 2、獲取本地的檔案的地址,建立java和檔案的連線。 3、獲取檔案輸入流和資料輸出流(注意:這裡的輸入和輸出都是指
最簡單的socket通訊伺服器和客戶端
底部附上了效果圖 伺服器程式碼: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java
關於http和serverlet實現伺服器和客戶端的互動
Servlet的框架是由兩個Java包組成:javax.servlet和javax.servlet.http. 在javax.servlet包中定義了所有的Servlet類都必須實現或擴充套件的的通用介面和類.在javax.servlet.http包中定義了採用HTTP通訊協議的HttpServlet類.
Java實現伺服器和客戶端簡單通訊
Java中網路程式設計這一塊有封裝的類庫,使用簡單,瞭解原理可以教容易實現伺服器和客戶端的簡單通訊。 在程式設計之前,首先要需要對TCP/IP協議有一定的瞭解,需要知道Socket套接字的作用以及用法,這個可以在API文件中去檢視。兩通訊實體之間通訊需要掌握資
csapp書上socket的伺服器和客戶端的程式碼
客戶端的程式碼: #include "csapp.h" int main(int argc, char **argv) { int clientfd, port; char *host, buf[MAXLINE]; rio_t rio; if (arg
python實現tcp伺服器和客戶端(socket)
python實現tcp伺服器和客戶端(socket) 1.socket模組 socket是什麼 socket最初是為了同一主機上的應用程式建立的,使得一個程式與另外一個程式之間可以通訊,也就是所謂的程序間通訊,有兩種型別的socket:基於檔案和麵向網路的。
【隨堂筆記】unity開發中Socket的用法(一,實現伺服器與客戶端簡單的連結)
實現了簡單的連結,也增加了客戶端沒有連結到伺服器的自動重連 伺服器程式碼 using System; using System.Net; using System.Net.Sockets; namespace SeverSocket { class Program
linux下用多執行緒實現socket伺服器和客戶端的非同步通訊
前面介紹了用select函式來實現socket的非同步收發資料,但是select函式也有一些缺陷,要使socket能持續地通訊,select必須不停地檢測,這樣程序就會一直阻塞在這裡,限制了功能的擴充套件,這裡我們用多執行緒的方式,另建立兩個執行緒用來發送/接收
Python實現udp協議的簡單伺服器和客戶端通訊
簡單socket程式在兩臺電腦之間傳輸訊息,分為客戶端和服務端,分別在兩臺電腦上執行後即可進行簡單的訊息傳輸,也可以在一臺電腦上測試,設定兩個不同的埠即可 以下是程式碼在一臺電腦上執行,開兩個終端即可
socket程式設計回射伺服器和客戶端
//回射伺服器 #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet
實現socket的服務和客戶端通訊
對學習過程中自己敲的一些關於socket有關的程式碼做了個簡單總結,在這分享一下,給有需要的同學借鑑一下。 什麼是socket? 網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。 建立網路通訊連線至少要一對埠號(socket)。socke
【Redis】Redis在Ubuntu中的伺服器和客戶端操作
伺服器端 伺服器端的命令為: redis-server 可以使用help檢視幫助文件 redis-server --help 個人習慣 ps aux | grep redis # 檢視redis伺服器程序 sudo kill -9
ROS學習筆記19 (編寫簡單的伺服器和客戶端 (Python))
1 編寫服務端節點 我們會建立服務端節點 ("add_two_ints_server") ,節點接收兩個整型數字,並返回和 進入beginner_tutorials包 $ roscd beginner_tutorials 確保你確保已經在之前建立好AddTwoInts
簡單的TCP 流式socket 伺服器和客戶端程式碼示例
電子書在這裡,見6.8.1 和6.8.2 章節,書中的程式碼有很多錯誤,包括#include、socket 描述符賦值等,正確的程式碼在這裡 Server 程式碼: #include <stdio.h> #include <stdlib.h> #in