python提供了两个socket模块

Socket,它提供了标准的BSD Sockets API

SocketServer,它提供了服务器中心类,可以简化网络服务器的开发

下面先说socket模块

1、socket类型

套接字格式:

socket(family,type[,protocal]) 使用给定的地址、套接字类型、协议编号(默认为0)来创建套接字

常用的套接字类型:

socket.SOCK_STREAM      面向连接的,TCP

socket.SOCK_DGRAM无连接,UDP

创建TCP Socket:s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

创建UDP Socket:s=socket.socket(socket.AF_INET,socket.DGRAM)

2、socket函数

注意点:

1)TCP返送数据时,已建立好TCP连接,所以不需要指定地址。UDP是面向无连接的,每次发送要指定是发给谁。

2)python2.x版本发送的是字符串格式的数据,python3.x是字节格式,需注意。

s.bind(address)                将套接字绑定到地址,在AF_INET下,以元组(host,port)的形式表示地址

s.listen(backlog)              开始监听TCP传入连接。backlog指定在拒绝连接之前,操作系统可以挂起的最大连接数量。该值最少为1,大部分应用程序设定为5就可以了。

s.accept()                        接收TCP连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。

s.connect(address)         连接到address处的套接字。一般address的格式为元组(hostname,port),如果连接出错,返回socket error错误。

s.connect_ex(address)   功能与connect(address)相同,但是成功返回0,失败返回error的值。

s.recv(bufsize[,flag])       接收TCP套接字的数据。数据以bytes字节形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。

s.send(string[,flag])        发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。

s.sendall(string[,flag])    完整发送TCP数据。将string中的数据发送到连接的套接字。但在返回之前会尝试发送所有数据。成功返回None,失败则抛出异常。

s.close()  关                   闭套接字。

3、socket编程思路

TCP服务端:

1 创建套接字,绑定套接字到本地IP与端口

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.bind()

2 开始监听连接

s.listen()

3 进入循环,不断接受客户端的连接请求

s.accept()

4 然后接收传来的数据,并发送给对方数据

s.recv()

s.sendall()

5 传输完毕后,关闭套接字

s.close()

TCP客户端:

1 创建套接字,连接远端地址

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect()

2 连接后发送数据和接收数据

s.sendall()

s.recv()

3 传输完毕后,关闭套接字

s.close()

4、简单的socket编程代码

​SERVER端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import socket                #导入socket模块
  
ip_port=('127.0.0.1',9999)   #定义主机,端口号
  
s=socket.socket()            #实例化socket对象(买手机)
  
s.bind(ip_port)              #绑定IP端口(买手机卡)
  
s.listen(5)                  #建立5个连接池,等待接收请求,挂起连接
  
#等待电话
conn,addr=s.accept()         #conn就是建立通信,负责收发消息的通道,每次只处理一个请求,
                             #accept是阻塞请求,当第二个请求来的时候会进入listen连接池
                             #挂起等待处理
while True:
    try:
        recv_data = conn.recv(1024)             #收消息
        if len(recv_data) == 0:break            #如果客户输入为空的话退出
        if recv_data == 'exit':break            #客户端退出,服务端跟着退出
        send_data = recv_data.upper()          
  
        print(send_data)
        conn.send(send_data)                    #回复消息
    except Exception:
        break
  
conn.close()                                    #挂电话,关闭连接通道

Client端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import socket
  
ip_port=('127.0.0.1',9999)
  
s=socket.socket()
  
s.connect(ip_port)    #这里的connect实际是服务端的conn,与服务端建立连接
  
  
while True:
    send_data=input(">>>: ").strip() #发送消息
    if send_data == 'exit':break
    if len(send_data) == 0:continue
    s.send(bytes(send_data,encoding='utf-8'))
  
    #收消息
    recv_data=s.recv(1024)
    print(str(recv_data,encoding='utf-8'))
  
#挂电话
s.close()

python网络编程-socket的更多相关文章

  1. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  2. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  3. python网络编程-socket编程

     一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...

  4. python网络编程socket /socketserver

    提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...

  5. python --- 网络编程Socket

    网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...

  6. Python网络编程-Socket简单通信(及python实现远程文件发送)

    学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: i ...

  7. Day10 Python网络编程 Socket编程

    一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...

  8. python网络编程——socket基础篇

    python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...

  9. Python 网络编程——socket

    一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...

  10. Python网络编程—socket(二)

    http://www.cnblogs.com/phennry/p/5645369.html 接着上篇博客我们继续介绍socket网络编程,今天主要介绍的内容:IO多路复用.多线程.补充知识点. 一.I ...

随机推荐

  1. freemarker页面如何获取绝对路径basePath

    1. freemarker获取系统相对路径方式 spring-mvc.xml 中配置 <!-- FreeMarker视图解析 如返回userinfo..在这里配置后缀名ftl和视图解析器.. - ...

  2. Oracle之nclob类型

    此类型会严重影响查询效率,请少用: nclob字段在查询结果中显示为<NCLOB>,查看nclob类型的值方法有两种 a.可点开...查看具体数据 b.选择所有数据,右击复制到Excel, ...

  3. java内存泄漏的定位与分析

    1.为什么会发生内存泄漏 java 如何检测内在泄漏呢?我们需要一些工具进行检测,并发现内存泄漏问题,不然很容易发生down机问题. 编写java程序最为方便的地方就是我们不需要管理内存的分配和释放, ...

  4. Xcode 运行cocos2dx弹出内部错误对话框(Internal Error)

    cocos2dx未捕获的异常升高.选择"继续"继续运行在一个不一致的状态.选择"崩溃"停止应用和崩溃报告一个错误文件. 莫名其妙,代码没有报错,运行时却弹出(内 ...

  5. delphi之TDataset

    最近遇到了很多问题,现在做一下总结. 字符串处理: 字符串相加 var S1, S2: String; begin S1 := Concat('A', 'B'); // 连接两个字符串,S1变量等于A ...

  6. (转载)spring mvc DispatcherServlet详解之一---处理请求深入解析

    要深入理解spring mvc的工作流程,就需要先了解spring mvc的架构: 从上图可以看到 前端控制器DispatcherServlet在其中起着主导作用,理解了DispatcherServl ...

  7. js统计,然后去重例子

    var list=new Array(); for(var i=0;i<result.length;i++){ examsubject=result[i].examsubject; list.a ...

  8. alert()、confirm()和prompt()的区别与用法

    1.警告消息框alertalert 方法有一个参数,即希望对用户显示的文本字符串.该字符串不是 HTML 格式.该消息框提供了一个"确定"按钮让用户关闭该消息框,并且该消息框是模式 ...

  9. R12.2 URL Validation failed. The error could have been caused through the use of the browser's navigation buttons

    EBS升级到R12.2.4后,进入系统操作老是报以下错误: 通过谷歌发现有人遇到相同的问题,并提供了解决方案. 原文地址:http://onlineappsdbaoracle.blogspot.com ...

  10. js ajax同步请求造成浏览器假死的问题

    一.问题的起因 今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可以刷新用户当前的积分,这个肯定需要使用到ajax的同步请求了,当时喀喀喀三下五除二写玩了,大概代码如下: /** ...