2018-10-24 day 19-まとめ

5019 ワード

ネットワーク通信
一、socketサーバー
ソケットはソケットとも呼ばれ、ネットワーク通信を実現する両端がソケットである.サーバに対応するソケットとクライアントに対応するソケットpythonは、socket標準ライブラリを提供することでsocketプログラミングをサポートします.socketプログラミングは、サーバとカスタマーサービスをプログラムで実現することです.
import socket-->socketモジュールの呼び出し
=====サーバプログラムを書く========
1.サーバ対応ソケットオブジェクトの作成
socket(family,type)
family:IPタイプAF_の設定INET(ipv 4)-->デフォルトAF_INET(ipv 6)type:転送タイプSOCK_の設定STREAM(TCP信頼転送)->デフォルトSOCK_DGRAM(UDP不確実伝送)
server=socket.socket() #      ipv4            

2.IPとポートのバインド
bind((ip,ポート))
ip:サーバのアドレスポート:異なるポートは、コンピュータ上の異なるサービスを区別するために使用されます.値範囲は0-65535です.0-1024は有名なポートです(特殊なサービスポートをバインドするために使用されます.勝手に使用しないでください).
server.bind(('10,7,156,68',8080))

3.傍受要求
Listen(個数)
-->サーバが一度に処理できる最大リクエスト数を数値設定する必要があります
server.listen(512)
print('    ')

4.サーバーを常に起動状態にする
while True:
    # 5.        
    '''
       accept(),      ,                         。
              
    '''
    conversation,addr=server.accept()
    print(addr)

    #6.           
    '''
    send(data)-->    
    data:       ,        (bytes)
    
    str   bytes :  a.bytes(   ,encoding='utf-8')
                    b.   .encode(encoding='utf-8')
  
    '''
    message='   '
    message_data=bytes(message,encoding='utf-8')
    conversation.send(message_data)

    #7.          
    '''
    recv(   )-->           ,                  .
              (     )
    bytes      :a. str(   ,encoding='utf-8')
                               b.   .decode(    )
    :recv        ,                    
    '''
    data=conversation.recv(1024)
    re_message=data.decode('utf-8')
    print(re_message)
    with open('./files/text1.txt','wb')as f:
        f.write(data)
    print('    ')

ファイル内の画像をクライアントに渡す
    #       
    with open('./files/luffy4.jpg', 'br') as f:
        content = f.read()
        conversation.send(content)
        #     
        conversation.close()

二、socketクライアント
    import socket    #  socket  

1.クライアントソケットオブジェクトの作成
    client=socket.socket()

2.接続サーバー
接続(アドレス)
  client.connect(('10.7.156.68',8080))
while True:
  #4.        
  message=input('   :')
  client.send(message.encode('utf-8'))
  if message=='  ':
      break
#3.          
  re_data=client.recv(1024)
  re_message=re_data.decode('utf-8')
  print(re_message)
  if re_message=='  ':
      break

三、socketクライアントのアップグレード
import  socket    #  socket  

1.サーバーソケットの作成
server=socket.socket()

2.バインドアドレス
server.bind(('10.7.156.68',8080))

3.傍受
server.listen(100)

サーバを常に稼働させる
while True:
    #4.    
    conversation,addr=server.accept()
    while True:
        message_re = conversation.recv(1024).decode('utf-8')
        print('   (%s):%s'%(addr[0][-2:],message_re))

        #5.         
         data=conversation.recv(1024)
         message=data.decode('utf-8')
        print(message)

        #6.    
        message_se=input('   :')
        data_se=message_se.encode('utf-8')
        conversation.send(data_se)

四、画像を受け取る額面クライアント
import socket

client = socket.socket()
client.connect(('10.7.156.97', 8082))

message_re = client.recv(1024)
data = bytes()  #            
while message_re:

    # print(message_re)
    data += message_re  #            
    # print('     ')
    message_re = client.recv(1024)

with open('./new.jpg', 'bw') as f:
    f.write(data)
print('    ')

五、requests要求
pythonにはネットワークリクエストをサポートする標準ライブラリはありませんが、httpリクエストをサポートするサードパーティ製ライブラリが現在存在します.
   import  requests

requests.get(url,params)
url->要求アドレスparams->クライアントがサーバに送信するデータ(辞書){パラメータ名:値}
url='https://www.apiopen.top/satinApi?type=1&page=1'
response=requests.get(url)

1.応答ヘッダの取得
  print(response.headers)

2.バイナリ形式の応答体を持つ
 data_bytes=response.content
 print(type(data_bytes))

3.文字列形式の応答体を持つ
data_str=response.text()
print(type(data_str),data_str)

4.json形式で対応するpythonデータ
data_json=response.json()
print(type(data_json),data_json['code'])

5.画像をローカルにダウンロード
response=requests.get('http://wimg.spriteapp.cn/profile/large/2018/02/24/5a90448611639_mini.jpg')

content=response.content
with open('./files/image.jpg','bw')as f :
    f.write(content)