广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python中socket与socket
  • 163
分享到

python中socket与socket

pythonsocket 2023-01-31 02:01:21 163人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

一、socket模块Socket又叫套接字,是网络编程中的一个基本组件,是两个端点的程序之间的“信息通道”程序可分布在不同的计算机上(通过网络连接),通过socket套接字相互发送信息。python中的大多数的网络编程都 隐藏了socket

一、socket模块
Socket又叫套接字,是网络编程中的一个基本组件,是两个端点的程序之间的“信息通道”程序可分布在不同的计算机上(通过网络连接),通过socket套接字相互发送信息。python中的大多数的网络编程都 隐藏了socket模块的基本细节。
Python中通过socket模块完成网络编程的套接字实现,一个套接字就是socket模块中的socket类的一个实例。socket实例化需要三个参数分别是family(ipv4,ipv6,unix)其中默认是ipv4 "socket.AF_INET",第二个参数是流,默认是socket.SOC_STREAM表示tcp,或socket.SOCK_DGRAM,第三个参数是协议,默认是0,使用默认即可。因此实际上实例化出一个套接字,只需要二个参数。

socket通讯原理:
python中socket与socketserver模块简单入门使用

socket函数
python 3.x下发送的内容必须是byte类型,2.x是字符串
python中socket与socketserver模块简单入门使用
python中socket与socketserver模块简单入门使用

二、socket简单通讯
环境说明:ubuntu 16.04 python 3.5.2 模拟的服务器和客户端均在一台机器上(可以在不同机器上,只要保障网络连接)

先来看一个简的服务器与客户端的socket通讯
功能:服务器侦听等待连接,客户端连接后发送连接信息,之后客户端发送的任何信息,服务器端原样返回客户端。
代码如下:
1、srv.py

import socket
sk = socket.socket()
#print(sk)
HOST = '127.0.0.1'
PORT = 2222
BUFSIZ = 1024
ADDR = (HOST,PORT)

sk.bind(ADDR)
sk.listen(5)
print("waiting...")

while True:
    conn,addr = sk.accept()
    ip,port = addr
    print("Got connection from",addr)
    conn.send(bytes("connected from %s:%s." %addr,"utf-8"))
    while True:
        data = conn.recv(BUFSIZ)
        if not data:
            break                                     #直接回车退出本次连接
        print(data)
        conn.send(data)

conn.close()

cli.py

import socket
HOST = '127.0.0.1'
PORT = 2222
BUFSIZ = 1024
ADDR = (HOST,PORT)
sk = socket.socket()
sk.connect(ADDR)
print(sk.recv(BUFSIZ))
while True:
    inp = input(">>>")
        if not inp:                                       #忽略空格回车
            continue
    sk.send(bytes(inp,"utf-8"))
    print(sk.recv(BUFSIZ))

运行结果:
python中socket与socketserver模块简单入门使用
python中socket与socketserver模块简单入门使用

以上是一个最简单的socket网络通讯。以上可以发现双方通讯时一发一收,或一收一发,总是成对出现,但有一个缺点,就是同时只能给一个客户端提供服务(通讯)其他的客户端只能等待。后面通过socketserver来解决一服务器多客户端同时连接的情况。

三、socket上传文件
在完成基本的通讯后,我们来做一个文件上传的实例。
server端

#coding:utf-8
import socket
import os
sk = socket.socket()
#print(sk)
HOST = '127.0.0.1'            #指定ip
PORT = 2222                     #侦听端口
BUFSIZ = 1024                  #缓存大小
ADDR = (HOST,PORT)

sk.bind(ADDR)                   #套接字ip端 口进行绑定
sk.listen(5)                           #连接等待数,默认5
print("waiting....")
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

while True:
    conn, addr = sk.accept()
    print(addr)
    while True:
        data = conn.recv(1024)
        cmd,filename,filesize = (str(data,"utf-8")).split("|")
        path = os.path.join(BASE_DIR,'yuan',filename)
        filesize = int(filesize)

        f = open(path,"ab")
        has_receive = 0
        while has_receive != filesize:
            data = conn.recv(1024)
            f.write(data)
            has_receive+=len(data)
        f.close()

sk.close()

client端

#coding:utf-8
import socket
import os

HOST = '127.0.0.1' 
PORT = 2222
BUFSIZ = 1024
ADDR = (HOST,PORT)
sk = socket.socket()
sk.connect(ADDR)

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
while True:
    inp = input(">>>").strip() #post|12.png
    cmd,path = inp.split("|")
    path = os.path.join(BASE_DIR,path)  ##完整文件路径xxx/12.png
    filename = os.path.basename(path)    ##获取文件名
    file_size = os.stat(path).st_size    #获取文件大小
    file_info = "post|%s|%s" %(filename,file_size)
    sk.sendall(bytes(file_info,"utf-8"))
    f = open(path,'rb')
    has_sent = 0
    while  has_sent != file_size:
        data = f.read(BUFSIZ)
        sk.sendall(data)
        has_sent+=len(data)
    f.close()
    print("上传成功~")
sk.close()

总结:socket通讯的关键是一发一收,无论是服务端先发还是客户端先发,必须是一端发送另一端接收,如果连续发送会出现粘包现象。

四、socketserver实例多并发通讯

server.py

#coding:utf-8
import socketserver    #能实现并发
#并发聊天
class MyServer(socketserver.BaseRequestHandler):
    print("服务端启动...")
    def handle(self):
        while True:
            conn = self.request
            print (self.client_address)
            while True:
                client_data=conn.recv(1024)
                print (str(client_data,"utf8"))
                print ("waiting...")
                server_response=input(">>>")
                conn.sendall(bytes(server_response,"utf8"))
            conn.close()

if __name__ == '__main__':
    server = socketserver.ThreadingTCPServer(('127.0.0.1',2223),MyServer)
    server.serve_forever()

client.py

#coding:utf-8
import socket

ip_port = ('127.0.0.1',2223)
sk = socket.socket()
sk.connect(ip_port)
print ("客户端启动:")
while True:
    inp = input('>>>')
    sk.sendall(bytes(inp,"utf-8"))
    if inp == 'exit':
        break
    server_response=sk.recv(1024)
    print (str(server_response,"utf-8"))
sk.close()

执行结果服务器端通过多线程完成并发多客户端“同时”聊天效果。

以上为socket socketserver基本应用。如有不当之处欢迎指正。

--结束END--

本文标题: python中socket与socket

本文链接: https://www.lsjlt.com/news/186508.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中socket与socket
    一、socket模块socket又叫套接字,是网络编程中的一个基本组件,是两个端点的程序之间的“信息通道”程序可分布在不同的计算机上(通过网络连接),通过socket套接字相互发送信息。python中的大多数的网络编程都 隐藏了socket...
    99+
    2023-01-31
    python socket
  • python socket
    1、TCP链接 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。所以在进行TCP链接时首先要开启服务器端口。 TCP服务端一般有几个步骤: ①  sk = socket.socket(socket.AF_INET, socke...
    99+
    2023-01-30
    python socket
  • python之socket
    python之socket一、初识socket        socket 是网络连接端点,每个socket都被绑定到一个特定的IP地址和端口。IP地址是一个由4个数组成的序列,这4个数均是范围 0~255中的值(例如,220,176,36...
    99+
    2023-01-31
    python socket
  • python 3 socket
    server.py:import socketdef main():    host = '127.0.0.1'    port = 5000    server_socket = socket.socket()    server_soc...
    99+
    2023-01-31
    python socket
  • python socket window
    python socket 在本机跑成功后 在服务器端 将服务器端的代码放上去 却发现 跑不动关掉服务器的windows 防火墙 就没有问题了 可以跑但是 担心不安全;在服务器防火墙的高级安全设置 里面 新建 入站规则 选择 端口  然后 ...
    99+
    2023-01-31
    python socket window
  • Python thread socket
    从网上参考了一些代码,实现了一个Python实现的基于线程的socket server, 用来实现各种服务系统的原型。放在这里供以后参考。 #!/usr/bin/env python import threading&...
    99+
    2023-01-31
    Python thread socket
  • Python网络编程之socket与socketserver
    目录一、基于TCP协议的socket套接字编程1、套接字工作流程1、 服务端套接字函数2、 客户端套接字函数3、 公共用途的套接字函数4、 面向锁的套接字方法5、 面向文件的套接字的...
    99+
    2022-11-11
  • Python的socket与socketserver怎么使用
    这篇“Python的socket与socketserver怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python...
    99+
    2023-06-30
  • Python 中的 socket 模块
    本文参考PYTHON 网络编程 第一章import sockethelp(socket)    Functions:    socket() -- create a new socket object    socketpair() -- ...
    99+
    2023-01-31
    模块 Python socket
  • python socket学习
    一、简单实例:实现客户端向服务端发送的信息,服务器收到信息后加上当前时间再返回给客户端服务端实现:#!/usr/bin/python import socket, traceback, time host = '' port = 8000 ...
    99+
    2023-01-31
    python socket
  • python socket编程
    socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开...
    99+
    2023-01-31
    python socket
  • python--socket用法
    服务器端:import SocketServerimport osclass MyTCPHandler(SocketServer.BaseRequestHandler):    def handle(self):        print ...
    99+
    2023-01-31
    python socket
  • python简单socket
    clinet端#! /usr/bin/env python # -*-coding: utf-8-*- #这段代码是clinet端 import socket   #for sockets import sys  #for exit t...
    99+
    2023-01-31
    简单 python socket
  • python Socket模块
      UDP:   from socket import * import struct send_data = struct.pack('!H8sb5sb',1,'test.jpg',0,'octet',0) ========>利...
    99+
    2023-01-30
    模块 python Socket
  • python 实现socket
    socketserver   client服务器端  监听socket  IP+端口   网络通信本地  网络stream  tcp  dgram udp ftp服务器   传文件  传命令socket.server  多线程-执行impo...
    99+
    2023-01-31
    python socket
  • Python-socket编程
    一.socket编程Socket 是网络编程的一个抽象概念。通常我们用一个 Socket 表示“打开了一个网络链接”,而打开一个 Socket 需要知道目标计算机的 IP地址和端口号,再指定协议类型即可。二.Python的socket编程实...
    99+
    2023-01-31
    Python socket
  • Python-socket总结
    socket是什么什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白了就是一种通信机制。列入你和移动客服咨询问题时,会有一个客服...
    99+
    2023-01-31
    Python socket
  • 详解MySQL中的pid与socket
    目录1.pid-file介绍2.socket文件介绍总结: socket文件:当用Unix域套接字方式进行连接时需要的文件。 pid文件:MySQL实例的进程ID文件。 1.pid-file介绍 M...
    99+
    2022-05-12
    MySQL socket MySQL pid
  • python基于并发与socket实现远
    FTP程序 Client: * bin/start.py 程序入口 * conf/配置文件存放 * core/ * auth.py 登陆,注册以及上传下载查看当前文件夹下文件以及删除功能存放 * cline.py 与服务端...
    99+
    2023-01-30
    python socket
  • python的socket编程
    转自http://www.oschina.net/question/12_76126 参考http://www.cnblogs.com/waniu/archive/2012/08/08/2628390.html 一个简单的python so...
    99+
    2023-01-31
    python socket
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作