zoukankan      html  css  js  c++  java
  • python socket 学习

    Python在网络通讯方面功能强大,今天学习一下Socket通讯的基本方式,分别是UDP通讯和TCP通讯。

    UDP通讯

    upd 服务端

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 import socket
     5 
     6 ADDR,PORT = 'localhost',7878
     7 sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
     8 sock.bind((ADDR,PORT))
     9 
    10 print 'waiting for connection...'
    11 
    12 while True:
    13     data, addr = sock.recvfrom(1024)
    14     print('Received data:', data, 'from', addr)

    upd客户端

    1 #!/usr/bin/env python
    2 # -*- coding:utf-8 -*-
    3 
    4 import socket
    5 
    6 ADDR,PORT = 'localhost',7878
    7 sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    8 sock.sendto(b'hello,this is a test info !',(ADDR,PORT))

    先开启server端,等待client端的接入,每请求一次client会打印如下内容

    waiting for connection...
    ('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 57331))
    ('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 61396))
    ('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 61261))
    ('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 54875))

    TCP通讯

    TCP服务端

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 from socket import *
     5 import os
     6 
     7 ADDR,PORT = 'localhost',7878
     8 sock = socket(AF_INET,SOCK_STREAM)
     9 sock.bind((ADDR,PORT))
    10 sock.listen(5)
    11 
    12 while True:
    13     conn,addr = sock.accept()
    14     print "new conn:",addr
    15     while True:
    16         print 'waiting for connection'
    17         data = conn.recv(1024)
    18         if not data:
    19             print '客户端已经断开'
    20             break
    21         print '执行指令',data
    22         cmd_res = os.popen(data).read() #为执行传回的指令
    23         if len(cmd_res) == 0:
    24             print 'cmd has no output...'
    25 
    26         conn.send(str(len(cmd_res)).encode('utf-8')) #发送大小
    27         #client_chk = conn.recv(1024) 解决粘包问题 #wait client to confirm
    28         conn.send(cmd_res)
    29         print 'send done'
    30     conn.close()
    31 sock.close()

    TCP客户端

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 from socket import *
     4 
     5 ADDR,PORT = 'localhost',7878
     6 sock = socket(AF_INET,SOCK_STREAM)
     7 sock.connect((ADDR,PORT))
     8 while True:
     9     data = raw_input('>>')
    10     sock.send(data)
    11     print('发送信息到%s:%s' % (host, data))
    12     cmd_size = sock.recv(1024)
    13     print '命令结果大小 size',cmd_size
    14     sock.send('准备好接收了,可以发了')
    15     received_size = 0
    16     received_data = b''
    17     while received_size < int(cmd_size):
    18         data = sock.recv(1024)
    19         received_size += len(data)
    20         received_data += data
    21         print received_size
    22     else:
    23         print '=================
    '
    24         print 'cmd receive done',received_size
    25         print 'receive data:
    ',received_data
    26 
    27 sock.close()
  • 相关阅读:
    Keepalived案例一:Keepalived双机热备(HA)精讲
    Linux服务器挂载ntfs移动硬盘
    RAC 单节点实例异常关闭,关键报错ORA--29770
    模拟等待事件:db file sequential read
    使用dbms_stats.gather_table_stats调整表的统计信息
    oracle rac常用的网络检查命令
    收集Oracle数据库中的SQL基线信息(一)基础信息收集
    Oracle 通过sql profile为sql语句加hint
    将指定SQL的执行计划从共享池删除的方法
    数据库什么时候建立索引?
  • 原文地址:https://www.cnblogs.com/gide/p/6137604.html
Copyright © 2011-2022 走看看