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. OC编码问题输出中文

    #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...

  2. 极简Photoshop 教程

    本文通过创建一个iPhone应用的启动界面来介绍常用的Photoshop 用法. 1,以下参数创建一个新图像 宽度:1242像素,高度:22208像素,分辨率:401,背景内容:透明,其它默认 2,建 ...

  3. Android 强烈推荐:程序员接私活那点事

    今天周末在家宅着,并不是我不想运动,是因为北京的雨雪交加导致我想在家写文章,不过想想给大家写文章还是蛮惬意的,望一眼窗外,看一眼雪景,指尖在键盘上跳动,瞬间有种从屌丝程序员转变成了小姑娘们都羡慕的文艺 ...

  4. spark 源码安装

    clone 源码 git clone git://github.com/apache/spark.git maven编译源码 国外镜像比较慢,此处修改maven仓库的镜像为阿里云镜像: <mir ...

  5. iOS,iOS对Android数据互通的规则

    AppStore针对数据互通的规则:在AppStore上架的应用,苹果会按照3:7的比例抽取IAP( In-App Purchase)三成的收入,作为渠道费用 11.2    Apps utilizi ...

  6. 偶遇到 java.util.ConcurrentModificationException 的异常

    今天在调试程序 遇到了如此问题 贴上代码来看看稍后分析 List<String> list = null;boolean isUpdate = false;try { list = JSO ...

  7. 今年暑假不AC

    "今年暑假不AC?""是的.""那你干什么呢?""看世界杯呀,笨蛋!""@#$%^&*%...&quo ...

  8. LA 3942 - Remember the Word (字典树 + dp)

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  9. NDK开发历程(一):android native code的调试方法

    引用:http://www.cnblogs.com/ychellboy/archive/2013/02/22/2922683.html 使用NDK在android上做开发是一件“痛并快乐着”的差事,之 ...

  10. Java开发环境的配置与Hello World

    一.Java开发需要做的准备 Java程序的执行过程是首先由Java编译器将以.java为后缀的Java源文件编译成.class字节码文件.然后字节码文件便可以由JVM虚拟机进行加载并执行. 在初学J ...