zoukankan      html  css  js  c++  java
  • Python_网络编程_socket()

    什么是 Socket?

    Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。

    详细资料查看菜鸟教程http://www.runoob.com/python3/python3-socket.html

    案例1 - 实现连接:

    1.1服务端

    # -*- coding: UTF-8 -*- 
    # Filename : Python_网络编程_服务器端.py
    
    #引入模块
    import socket,sys
    
    #创建socket对象
    serversocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #socket内的两个参数分别是:IPV4、TCP
    
    # 获取本地主机名
    host = socket.gethostname()
    port = 9999  #注:这里是自定义的,尽量不要用4000以内的端口
    
    # 绑定端口
    serversocket.bind((host, port))
    
    # 设置最大连接数,超过后排队
    serversocket.listen(5)
    
    print("服务器已经开启,可以连接...")
    while True:
        # 建立客户端连接
        clientsocket,addr = serversocket.accept()      
    
        print("连接地址: %s" % str(addr))
        
        msg='欢迎访问!'+ "
    "
        clientsocket.send(msg.encode('utf-8'))
        clientsocket.close()

    1.2客户端

    # 导入 socket、sys 模块
    import socket
    import sys
    
    # 创建 socket 对象
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    
    # 获取本地主机名
    host = socket.gethostname() 
    
    # 设置端口好
    port = 9999
    
    # 连接服务,指定主机和端口
    s.connect((host, port))
    
    # 接收小于 1024 字节的数据
    msg = s.recv(1024)
    
    s.close()
    
    print (msg.decode('utf-8'))

    案例2 - 实现双向信息传递:

    2.1服务器端

    # -*- coding:utf8 -*-
    
    
    """
    备注:这是服务器
    """
    import socket,sys  # 导入socket模块
    
    sk = socket.socket()  # 创建socket对象
    sk.bind(("127.0.0.1", 8888))  # 绑定端口,“127.0.0.1”代表本机地址,8888为设置链接的端口地址
    sk.listen(5)  # 设置监听,最多可有5个客户端进行排队
    print("等待客户连接中……")
    while True:     #准备循环执行以下步骤
        conn, addr = sk.accept()  # 阻塞状态,被动等待客户端的连接
        print(conn)  # conn可以理解客户端的socket对象
        print(addr)  # addr为客户端的端口地址
        # ('127.0.0.1', 40966)
        accept_data = conn.recv(1024)  # conn.recv()接收客户端的内容,接收到的是bytes类型数据,通常最大是1024个字节
        if  accept_data:  #‘如果能正常接收到客户端传来数据,就...’即:不为空
            accept_data2 = accept_data.decode("utf-8")  # str(data,encoding="utf8")用“utf8”进行解码
            if accept_data2=='exit':   #如果客户端传来的是“exit”就执行。。。
                sys.exit()
            else:    
                print("".join(("接收内容:", accept_data2, "    客户端口:", str(addr[1]))))
                send_data = input("输入发送内容:")  #给客户端发送内容
                conn.sendall(bytes(send_data, encoding="utf8"))  # 发送内容必须为bytes类型数据,bytes(data, encoding="utf8")用“utf8”格式进行编码
    conn.close()
    sys.close()

    2.2客户端:

    # -*- coding:utf8 -*-
    #修改接口,和server4链接
    #修改为多次运行  while True
    '''
    备注:这是客户端;当在客户端输入“exit”时服务端断开
    '''
    
    import socket
    while True:
        obj = socket.socket()   #注 括号内默认“socket.AF_INET,socket.SOCK_STREAM”,是IPV4 和 TCP协议
        obj.connect(("127.0.0.1",8888))   #声明链接方式,ip 和 端口
        send_data = input("输入发送内容:")  #输入传输内容(字符串格式)
        obj.sendall(bytes(send_data, encoding="utf8")) #转换为字节码格式并发送给服务器
        ret = str(obj.recv(1024),encoding="utf-8")  #接收到(服务器传来的)字节码格式的内容,转为字符串格式
        print(ret)    #输出
  • 相关阅读:
    纯CSS实现垂直居中的几种方法
    用定位实现机器人效果
    Java 集合 HashMap & HashSet 拾遗
    Java 集合 持有引用 & WeakHashMap
    Java 泛型 通配符类型
    多线程threading 的使用
    mysql 数据库的设计三范式
    python 排序算法
    Python 中的单例模式
    mysql 数据库引擎
  • 原文地址:https://www.cnblogs.com/hellangels333/p/8167590.html
Copyright © 2011-2022 走看看