python实现socket简单通信的示例代码

首先先来简单介绍下socket:

(具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解。

socket是在应用层与传输层之间的一个抽象层,它的本质是编程接口,通过socket,才能实现TCP/IP协议。
它就是一个底层套件,用来处理最底层消息的接受和发送。
socket翻译为套接字,可以把TCP/IP复杂的操作抽象为简单的几个接口来供应用层调用来实现进程在网络中的通信。socket起源于Unix,而Unix的基本要素之一就是“一切都为文件”,即可以通过打开——读写——关闭的模式来操作,通过这一点我们就可以来实现socket的简单编写

这里再贴上关于socket工作原理的具体图像:

大家若有看不懂的,也先别着急,看完下面的再来结合这张图理解会有更深的理解

其实在本机上,我们可以通过PID来标识唯一一个进程,但如果网络中的两个进程要进行通讯的话,PID的冲突就很大了,这个时候IP协议的ip地址就可以来标识主机,而TCP的协议与端口号可以标识主机的一个进程,所以就可以通过ip地址+协议+端口号来标识网络中的某个进程

大概了解的差不多了,我就来说说python里的socket库
先简单介绍一些socket库里的参数:
首先是地址蔟:

socket.AF_INET 表示的是IPv4(这也是socket里默认的)
socket.AF_INET6 表示的是IPv6
socket.AF_UNIX 这个主要用于单一的UNIX进程间的通信

然后是TYpe:

socket.SOCK_STREAM //流式socketTCP协议(默认的),用来保证数据顺序以及可靠性
socket.SOCK_DGRAM //这是报式socket UDP协议,保证数据接受的顺序,不可靠的连接
socket.SOCK_RAW //这是原始套接字,允许对底层协议(TCP/IP)直接访问

这里的流式与数据报式其实就是面向的区别:
流式是面向连接的TCP服务应用,而数据报式就是非面向连接的UDP服务应用,也就是无连接的socket

接着是一些方法的使用:

1:sk=socket.socket() :括号里面包含两个参数,一个参数默认是ip地址蔟的socket.AF_INET,也就是IPv4;还有一个默认是传输TCP协议,也就是socket.SOCK_STREAM
2:sk.bind(()) :最里面的括号里包含两个参数,分别是客户端的ip地址与端口号
3:sk.listen(n): 里面的n表示阻塞连接n个进程,也就是最大等待数为n个,当连接上某个进程后,其他的都不会连接上,会处于等待状态,只有当断开与这个进程的连接,其他的进程才会依次连上
4a,b=sk.accept():返回的是一个元组,元组的第一个参数是连接的信息,第二个参数是客户端的ip地址与端口号
5a.recv(1024): recv()表示接受信息,里面的1024表示最多接受的字节数,如果有多余的字符就下次再进行传输

大致的参数讲解完了,现在来开始服务端的脚本编写:

# -*-coding: utf-8 -*-
#引入socket库
import socket
#这是进行定义一个ip协议版本AF_INET(IPv4),定义一个传输TCP协议,SOCK_STREAM
sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定义ip地址与端口号,ip地址就是服务端的ip地址,端口随便定义,但要与客户端脚本一致
ip_port=('127.0.0.1',8000)
#绑定一个端口
sk.bind(ip_port)
#监听一个端口,这里的数字3是一个常量,表示阻塞3个连接,也就是最大等待数为3
sk.listen(3)
#接受客户端的数据,并返回两个参数,a为连接信息,b为客户端的ip地址与端口号
a,b=sk.accept()
print(a)
while True:
    data=a.recv(1024)#客户端发送的数据存储在recv里,1024指最大接受数据的量
    print(data.decode('utf-8'))
    message=input("you can say:")
    a.send(message.encode('utf-8'))
    if message==('bye'):
        break

接着来编写客户端的脚本:

# -*- coding:utf-8 -*-
#导入socket库
import socket
#定义一个ip协议版本AF_INET,为IPv4;同时也定义一个传输协议(TCP)SOCK_STREAM
client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#定义IP地址与端口号
ip_port=('127.0.0.1',8000)
#进行连接服务器
client.connect(ip_port)
while True:
    message=input('You can say:')
    client.send(message.encode('utf-8'))#将发送的数据进行编码
    a=client.recv(1024)#接受服务端的信息,最大数据为1k
    print(a.decode('utf-8'))
    if a.decode('utf-8')=='bye':
        break

这是运行的结果

左边窗口是服务端代码,右边窗口是客户端代码,当在服务端输入bye过后,整个对话将关闭

以上就是socket的简单通讯了

最后再讲讲UDP的专用代码(UDP与TCP的代码大致相同

sendto():这个函数用于在使用UDP时 发送数据
recvform():UDP专用,用于接受数据,返回数据远端的IP地址和端口
closc():关闭socket

大家若有兴趣可以自己去试试UDP的脚本实现,这里就不做具体示范啦

到此这篇关于python实现socket简单通信的示例代码的文章就介绍到这了,更多相关python socket通信内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python和websocket构建实时日志跟踪器的步骤

    前言 websocket 是一种网络传输协议.可在单个 TCP 连接上进行全双工通信.基于此,websocket 使得客户端与服务端的通信变得更加简便和高效. 什么是 websocket websocket 是独立的.创建在 TCP 上的协议.该协议在 2008 年诞生,并在 2011 年成为国际标准.它的一个主要特点是--全双工,即一旦建立连接,服务端或客户端可以主动向对方推送消息. 在 websocket 出现之前,网站如果需要实现推送技术,都是采用轮询的方式,即浏览器每隔一段时间就向服务器

  • 用Python进行websocket接口测试

    我们在做接口测试时,除了常见的http接口,还有一种比较多见,就是socket接口,今天讲解下怎么用Python进行websocket接口测试. 现在大多数用的都是websocket,那我们就先来安装一下websocket的安装包. pip install websocket-client 安装完之后,我们就开始我们的websocket之旅了. 我们先来看个炒鸡简单的栗子: import websocket ws = websocket.WebSocket() ws.connect("ws://

  • Python基础之Socket通信原理

    上图是socket网络编程的流程图 至于数据在网络中是怎么走的,咱先不说,那个太底层了,咱今天见就说如何将数据从咱的屏幕上放到网络流中去. 这可不是键盘敲敲,回车一按的事情,在这背后,那也是百转千回. 打开一个网络接口:套接字 Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. Python 中,我们用 socket()函数来创建套接字,语法格式如下: import socket # 居然

  • 详解python3中socket套接字的编码问题解决

    一.TCP 1.tcp服务器创建 #创建服务器 from socket import * from time import ctime #导入ctime HOST = '' #任意主机 PORT = 21567 #随机提供个端口号 BUFSIZ = 1024 # 缓冲区大小设置为1KB,可以根据网络性能和程序需要改变这个容量 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) #分配了 TCP 服务器套接字 tcpSerSo

  • python粘包问题及socket套接字编程详解

    粘包问题 TCP协议在传输过程中会出现数据粘包问题 讲一下TCP和UDP的区别,都是传数据的协议,没有好坏之说,只是不同的应用需求可能会更好选择哪一个协议 TCP:适合传输数量大 ,需要建立连接,会出现粘包问题,粘包问题可以解决,确定传入的长度,接收同样长度就可以保证一次性传输完 UDP: 适合传输数据量小,没有粘包,不需要连接,一次性传输,下一次就是新的数据,弊端就是数据丢失,不安全 QQ是用什么协议呢?按理应该可以用UDP协议,但是实际用的是TCP协议,这是历史遗留问题,可还记得我们输入QQ

  • python基础之Socket套接字详解

    前言 Python语言提供了Socket套接字来实现网络通信. Python的应用程序通常通过Socket"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯. 服务器和客户端的源代码 服务器端 #coding=utf-8 #创建TCP服务器 import socket import time from time import ctime HOST = '127.0.0.1' PORT = 8080 BUFSIZE=1024 sock = socket.s

  • Python socket 套接字实现通信详解

    首先:我们介绍一下socket什么是socket: 1. socket 在操作系统中它是处于应用层与传输层的抽象层,它是一组操作起来非常简单的接口(接收数据的),此接口接受数据之后交个操作系统 那么为什么?直接给操作系统不是更方便吗?那么你就想错了 因为操作系统的接口远比我们想象的要丑陋复杂,使用操作系统交换数据,非诚繁琐,,开发者们只能想办法让一个中间人和他们打交道,来简单的实现数据交换,那么就是socket套接字.它的作用就是:与操作系统之间数据交换将这些繁琐的操作,进行高度化封装,和简化,

  • python socket网络编程步骤详解(socket套接字使用)

    一.套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要.套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳.许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持.三种最流行的套接

  • python实现socket简单通信的示例代码

    首先先来简单介绍下socket: (具体更详细介绍的可以在网上找找,都讲得非常详细),这里主要是我自己的一些理解. socket是在应用层与传输层之间的一个抽象层,它的本质是编程接口,通过socket,才能实现TCP/IP协议. 它就是一个底层套件,用来处理最底层消息的接受和发送. socket翻译为套接字,可以把TCP/IP复杂的操作抽象为简单的几个接口来供应用层调用来实现进程在网络中的通信.socket起源于Unix,而Unix的基本要素之一就是"一切都为文件",即可以通过打开--

  • Vue与Node.js通过socket.io通信的示例代码

    一.Node中socket.io基础 1.是什么 Socket.IO类库,是在服务器和浏览器之间提供一个共享接口,其可以用于实现以下几种通信方式: HTML5中的WebSocket通信 Flash中使用的WebSocket通信 XHR轮询 JSONP轮询 Forever Iframe 在通信时,客户端与服务器端可以使用相同的API 2.怎么用 原理:创建Scoket.IO服务器,该服务器依赖于一个已经创建的HTTP服务器 服务器端引入 var http=require('http') var s

  • Go/Python/Erlang编程语言对比分析及示例代码

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

  • Python实现网络聊天室的示例代码(支持多人聊天与私聊)

    实验名称: 网络聊天室 功能: i. 掌握利用Socket进行编程的技术 ii. 掌握多线程技术,保证双方可以同时发送 iii. 建立聊天工具 iv. 可以和单人聊天 v. 可以和多个人同时进行聊天 vi. 使用图形界面,显示双方的语录 vii. 程序可以在一定程度上进行错误识别 概述 实验通过聊天室可以完成单人或多人之间的聊天通信,功能的实现主要是通过Socket通信来实现.本次实验采用客户端/服务器(C/S)架构模式,通过Python语言来编写服务器端与客户端的程序.运用多线程可完成多点对多

  • QT5实现UDP通信的示例代码

    目录 前言 一.UDP通信概述 二.UDP单播模式 1.接收数据 2.发送数据 总结 代码h文件 代码c文件 前言 该例程经过实际验证可以正常使用,只简单的使用UDP中的单播模式(一对一),其余模式将在后期逐步说明...... 所用测试系统在同一局域网,其中: QT版本:5.12 PC端UDP模式:单播 UDP通信目标:基于STM32F4+LWIP协议的以太网接口 一.UDP通信概述 UDP是轻量的.不可靠的.面向数据报.无连接的协议,它可以用于对可靠性要求不高的场合,和TCP通信不同,两个程序

  • C++ 实现即时通信的示例代码(直接运行)

    目录 题目 软件:VS 服务器端 客户端 题目 由于本学期上了网络编程课程,老师要求写使用Socke实现网络编程.于是参考C++多线程实现即时通信软件写出了简单版本的没有界面的即时通信软件. 软件:VS 直接上代码,需要讲解原理的,可以参考C++多线程实现即时通信软件 服务器端 //TcpServer_plus.exe #include<stdio.h> #include <Winsock2.h> #include<WS2tcpip.h> #pragma comment

  • node.js 用socket实现聊天的示例代码

    本文介绍了node.js 用socket实现聊天的示例代码,分享给大家,也给自己留个笔记,具体如下: 服务器搭建 app.js const http = require("http"); const express = require("./express"); //创建一个服务 const server = http.createServer(express); //监听服务端口 server.listen(8001,()=>{ console.log(&q

  • C语言实现socket简单通信实例

    本文实例讲述了C语言实现socket简单通信的方法,分享给大家供大家参考.具体实现方法如下: 服务器端代码如下: /* ============================================================================ Name : server.c Author : king Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-st

  • python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移动应用微信登录 网站应用微信登录 这里我们使用的是网站应用微信登录 按照 官方流程 1 注册并通过开放平台开发者资质认证 注册微信开放平台帐号后,在帐号中心中填写开发者资质认证申请,并等待认证通过. 2 创建网站应用 通过填写网站应用名称.简介和图标,以及各平台下载地址等资料,创建网站应用 3 接入

  • python 通过 socket 发送文件的实例代码

    目录结构: client: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket, struct, json download_dir = r'D:\Python\python_learning\gd\code\part3\02网络编程\文件传输\client\download' gd_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) gd_client.connect((

随机推荐