zoukankan      html  css  js  c++  java
  • python学习第七周之socket通信

    1.两台计算机之间进行通信,两台机器间进行收发数据,如果将发送与接收数据的代码封装起来,写成一个接口,这便是socket;socket主要是用来收发数据的。

    所有的网络协议都是基于socket的;网络协议有 HTTP(网页)、smtp(邮件)、dns、ftp、ssh、snmp、icmp ping(网络层,其他在应用层)。

    2.两台计算机通信遵守的规则有 TCPIP(三次握手、四次断开)、  UDP

    3.我们现在先实现一下两台计算机简单的通信一次(发送数据的为客户端、接收数据的为服务器端,当然客户端也可以接收数据,服务器端也可以发送数据)

    服务器端代码:

    #服务器端
    import socket  
    server=socket.socket()     #定义类型
    server.bind(('localhost',6969))  #绑定要监听的端口
    server.listen()  #监听
    
    print("准备接收数据")
    conn,addr=server.accept()   #等待接收数据
    print(conn,addr)   #conn是客户端连接过来而在服务器端为其生成的一个连接实例
    
    print("开始接收数据")
    data=conn.recv(1024)
    print("recv:",data)   #打印接收的数据
    conn.send(data.upper())   #发送数据,将其变为大写
    
    server.close()
    

     客户端代码:

    #客户端
    import socket
    
    #声明协议类型
    client=socket.socket()#声明socket类型,同时生成socket连接对象
    client.connect(('localhost',6969))
    
    client.send(b"hello world")
    data=client.recv(1024)
    print("recv:",data)
    
    client.close()
    

     以上代码实现了客户端跟服务器端的一次通信。

    4.将以上代码升级一下,让它们能通信多次:

    服务器端:

    #服务器端
    import socket,os
    server = socket.socket()
    server.bind(('localhost',6969)) #绑定要监听端口
    server.listen(5) #监听
    
    print("我要开始等电话了")
    while True:
        conn, addr = server.accept()  # 等电话打进来
        # conn就是客户端连过来而在服务器端为其生成的一个连接实例
        print(conn, addr)
        print("电话来了")
        count = 0
        while True:
            data = conn.recv(1024)
            print("recv:",data)
            if not data:
                print("client has lost...")
                break
            conn.send(data.upper())
            count+=1
            if count >10:break
    
    server.close()
    

     客户端:

    #客户端
    import socket
    
    #声明协议类型
    client = socket.socket() #声明socket类型,同时生成socket连接对象
    client.connect(('localhost',6969))
    
    while True:
        msg = input(">>:").strip()
        if len(msg) == 0:continue
        client.send(msg.encode("utf-8"))
        data = client.recv(10240)
        print("recv:",data.decode())
    
    client.close()
    
  • 相关阅读:
    fastjson生成和解析json数据
    fastJson API
    js实现class样式的修改、添加及删除的方法
    jquery ajax局部加载方法介绍
    jquery 动态添加和删除 ul li列表
    spring mvc3中的addFlashAttribute方法
    Spring MVC 3 : 一次上传多个文件
    pring mvc 批量上传+文件上传
    SpringMVC批量上传
    Android ADT Bundle(Eclipse with ADT) ADT R23
  • 原文地址:https://www.cnblogs.com/wuxiaoru/p/11592179.html
Copyright © 2011-2022 走看看