天天看點

socket 服務端發送資料大于用戶端接收速度_TCP發送與接收資料

socket 服務端發送資料大于用戶端接收速度_TCP發送與接收資料

類容

  • TCP用戶端
  • TCP服務端
  • TCP需要注意事項
  • 實作檔案下載下傳器

TCP用戶端建構流程

  • 1.建立socket
  • 2.連結伺服器
  • 3.接收資料
  • 4.關閉套接字
import socket
#建立套接字
tcp_demo=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)

#建立連接配接
tcp_demo.connect(("127.0.0.1",8080))

#發送資料
str1=input("請輸入你要發送的内容:")
tcp_demo.send(str1.encode("gbk"))


#接收伺服器發送過來的資料資料
str2=tcp_demo.recv(1024)
print(str2.decode("gbk"))
           

TCP服務端

  • 1.socket建立套接字
  • 2.bind綁定IP和port
  • 3.listen使套接字變為可以被動連結
  • 4.accept等待用戶端的連結
  • 5.recv/send接收發送資料
import socket

def deom():
    #建立套接字
    tcp_demo=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #綁定伺服器端口和ip
    tcp_demo.bind(("100.64.249.133",8080))
    tcp_demo.listen(128)
    #接受連接配接
    new_tcp_demo,client_addr =tcp_demo.accept()
    print(client_addr)
    #發送資料
    str1=input("請輸入你要發送的資料:")
    new_tcp_demo.send(str1.encode("gbk"))
    #接收客服端發送的資料
    str2=new_tcp_demo.recv(1024)
    print(str2.decode("gbk"))



if __name__ == '__main__':
    deom()

"""
實作TCP服務端為多個用戶端服務
- 當一個用戶端的服務結束之後就會自動斷開,為等待的一個用戶端服務
- 隻能服務一次,無法多次為一個用戶端服務
"""
           

TCP優化

import socket
def deom():
    #建立套接字
    tcp_demo=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #綁定伺服器端口和ip
    tcp_demo.bind(("100.64.249.133",8080))

    #接受連接配接
    while True:
        tcp_demo.listen(128)
        new_tcp_demo,client_addr =tcp_demo.accept()
        print(client_addr)
        #發送資料
        while True:
            str1=input("請輸入你要發送的資料:")
            new_tcp_demo.send(str1.encode("gbk"))
            #接收客服端發送的資料
            str2=new_tcp_demo.recv(1024)
            if str2.decode("gbk"):
                print(str2.decode("gbk"))
            else:
                break
        new_tcp_demo.close()
    tcp_demo.close()

if __name__ == '__main__':
    deom()
#添加循環是程式循環運作
           

實作檔案下載下傳器

下載下傳端
import socket
#建立接收端
tcp_demo=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
#綁定端口和ip
tcp_demo.bind(("100.64.249.133",8080))
tcp_demo.listen(128)
#建立連接配接
new_tcp_demo,client_addr=tcp_demo.accept()
print(client_addr)
#接收資料
str1=new_tcp_demo.recv(1024*1024)
file_name="demo.txt"

with open("附件" + file_name, "ab") as p:
    p.write(str1)
           
發送端
import socket
udp_demo=socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM)
udp_demo.connect(("100.64.249.133",8080))

#發送資料
with open('demo.txt','rb') as a:
    udp_demo.send(a.read())

udp_demo.close()
           
socket 服務端發送資料大于用戶端接收速度_TCP發送與接收資料

繼續閱讀