zoukankan      html  css  js  c++  java
  • python socket实例

    1.客户端向服务端发送

    #coding:utf-8
    '''客户端'''
    import socket
    khd=socket.socket() #声明socket类型,同时生产socket连接对象
    khd.connect(('localhost',2345))  #连接
    khd.send('应用')
    data=khd.recv(1024)
    print("recv:",data)
    khd.close()
    
    #coding:utf-8
    '''服务端'''
    import socket
    fuwud=socket.socket() #()内不写东西的话,代表第一个地址簇AF.INET
    fuwud.bind(('localhost',2345)) #绑定要监听端口
    fuwud.listen(5)  #监听
    print"等待中。。。。"
    conn,addr=fuwud.accept()  #等数据进来
    #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址addr对方的地址 print conn,addr print'开始了!' data=conn.recv(1024) print "recv:",data conn.send(data.upper()) fuwud.close()

    先运行服务端再运行客户端

    结果:

    等待中。。。。
    <socket._socketobject object at 0x021BCED8> ('127.0.0.1', 64335)  这里的端口64335是随机的。
    开始了!
    recv: 应用

    注:khd.send(b'holle,world') 这里的byci只解释acssii的数据,发送中文不用添加b 

    2.服务器接受客户端发来的4次消息后,自动断开。

    #coding:utf-8
    '''服务端'''
    import socket
    fuwud=socket.socket()
    fuwud.bind(('localhost',2345)) #绑定要监听端口
    fuwud.listen(5)  #监听
    print"等待中。。。。"
    while True: 
        conn,addr=fuwud.accept()  #等数据进来
            #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址
        print conn,addr
        print'开始了!'
        c=0
        while True:   
        
            data=conn.recv(1024)
            print "recv:",data
            conn.send(data.upper())        
            if c>4:  #从客户端接受4次 ,服务器端自动断开。
                break
            c=c+1
            print c
        fuwud.close()
        
    
    #coding:utf-8
    '''客户端'''
    import socket
    khd=socket.socket() #声明socket类型,同时生产socket连接对象
    khd.connect(('localhost',2345))  #连接
    while True:
        khd_data=raw_input('>>:')
        
        if len(khd_data) == 0:continue #send不能发送空值
        khd.send(khd_data)
        data=khd.recv(1024)
           
        print("recv:",data)
    khd.close()
    

    3.服务器端可以实现接受多个线程的信息。

    #coding:utf-8
    '''服务端'''
    import socket
    fuwud=socket.socket()
    fuwud.bind(('localhost',2345)) #绑定要监听端口
    fuwud.listen(5)  #监听
    print"等待中。。。。"
    while True: 
        conn,addr=fuwud.accept()  #等数据进来
            #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址
        print conn,addr
        print'开始了!'
        c=0
        while True:    
            data=conn.recv(1024)
            print "recv:",data
            conn.send(data.upper()) 
            c=c+1
            if c>4:  
                break    
            print c       
    fuwud.close()
    

    运行多个客户端。

    #coding:utf-8
    '''客户端'''
    import socket
    khd=socket.socket() #声明socket类型,同时生产socket连接对象
    khd.connect(('localhost',2345))  #连接
    while True:
        khd_data=raw_input('>>:')    
        if len(khd_data) == 0:continue
        khd.send(khd_data)
        data=khd.recv(1024)       
        print("recv:",data)    
    khd.close()
    

     4.服务器、客户端实现系统操作

    #coding:utf-8
    '''服务端'''
    import os
    import socket
    fuwud=socket.socket()
    fuwud.bind(('localhost',2345)) #绑定要监听端口
    fuwud.listen(5)  #监听
    print"等待中。。。。"
    while True: 
        conn,addr=fuwud.accept()  #等数据进来
            #conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址
        print conn,addr
        print'开始了!'
        c=0
        while True:    
            data=conn.recv(1024)
            print "recv:",data
            res=os.popen(data).read()
            conn.send(res) 
            c=c+1
            if c>4:  
                break    
            print c       
    fuwud.close()
    
    #coding:utf-8
    '''客户端'''
    import socket
    khd=socket.socket() #声明socket类型,同时生产socket连接对象
    khd.connect(('localhost',2345))  #连接
    while True:
        khd_data=raw_input('>>:')    
        if len(khd_data) == 0:continue
        khd.send(khd_data)
        data=khd.recv(1024)       
        print("recv:",data)    
    khd.close()
    

    5.服务端:

    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

    参数一:地址簇

      socket.AF_INET IPv4(默认)
      socket.AF_INET6 IPv6

      socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

    参数二:类型

      socket.SOCK_STREAM  流式socket , for TCP (默认)
      socket.SOCK_DGRAM   数据报式socket , for UDP

      socket.SOCK_RAW 原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。
      socket.SOCK_RDM 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。
      socket.SOCK_SEQPACKET 可靠的连续数据包服务

    参数三:协议

      0  (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议

    具体参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html

    import socket
    server=socket.socket(AF_INET,sock.SOCK_STREAM) 
    server.bind(localhost,9999) 绑定端口监听
    server.listen()
    while true:    #可以接受新的链接
        conn,addr=server.accept()#阻塞
        while true:
        data=conn.recv(8192)#recv默认是阻塞的
        if not data:
          break   #避免客户端断开,conn.recv收到的是空数据
        conn.send(data.upper())#如果发送出去
    
  • 相关阅读:
    数据结构(三)栈与递归
    机器学习(二)------ 回归
    数据结构(二)线性表
    数据结构(一)数据结构基础
    机器学习 (一)------分类
    操作系统概述
    NumPy函数库基础
    总线与输入输出子系统
    FT VIEW SE高效开发之全局对象
    STUDIO 5000 V32新CRACK和新功能
  • 原文地址:https://www.cnblogs.com/iexperience/p/9225369.html
Copyright © 2011-2022 走看看