1. 程式人生 > 程式設計 >Python TCP通訊客戶端服務端程式碼例項

Python TCP通訊客戶端服務端程式碼例項

這篇文章主要介紹了Python TCP通訊客戶端服務端程式碼例項,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

TCP客戶端:

import argparse,socket,sys
import time
# socket.setdefaulttimeout(20)

def recvall(sock,length):
  data = b''
  while len(data) < length:
    more = sock.recv(length - len(data))
    if not more:
      raise EOFError('總共有%dbytes,但只收到了%dbytes' % (length,len(data)))
    data += more
  return data
if __name__ == '__main__':
  sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  sock.connect(('192.168.137.1',10000))
  print('客戶的分配了socket:',sock.getsockname())
  i=0
  for x in range(4):
   # try:
     text = '我是客戶端你是伺服器嚯嚯嚯!'.encode('utf-8')
     i=i+len(text)
     sock.sendall(text)
     sys.stdout.flush()
     print("已傳送:",i)
   # except ConnectionResetError:
   #   pass
  sock.shutdown(socket.SHUT_WR)
  num = 0
  while True:
    reply = sock.recv(48) # b'Farewell,client'的長度
    num += len(reply)
    print('接收:',num)
    if not reply:
      print("ok")
      break

    # print('伺服器返回:',reply.decode('utf-8'))
  print("理論上應該關閉sock")
  sock.close()
time.sleep(1)

TCP服務端:

import argparse,sys

def recvall(sock,len(data)))
    data += more
  return data
if __name__ == '__main__':
  sc = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  sc.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
  sc.bind(('',10000))
  sc.listen()
  print('正在偵聽{}...'.format(sc.getsockname()))
  num = 0
  while True:
    scc,address = sc.accept()
    print('連線來自:',address)
    print('socket名字:',scc.getsockname())
    print('socket peer:',scc.getpeername())
    while True:
      message = scc.recv(42)#recvall(scc,24) # 嘗試 12,20,28會是什麼結果
      if not message:
        break
      # print('收到16-octet訊息:',repr(message))
      print('收到16-octet訊息:',(message.decode('utf-8')))
      scc.sendall(message)
      sys.stdout.flush()
      num += len(message)
      print("已傳送:",num)

    scc.close()
    print('應答傳送,socket關閉')
  sc.close()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。