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. ORM系列之二:EF(2)Code First

    目录 1. Code First是什么? 2. Code First 简单示例 3. 数据存储 4. 迁移 Code First是什么 Code First 顾名思义就是先写代码,当然不是乱写,而是按 ...

  2. .csv导入mysql时出现乱码

  3. ora-02292

    select  table_name from all_constraints where constraint_name = '约束的名称'

  4. Java内部DNS查询实现和参数设置

    一.Java内部DNS查询 Java使用域名查询时,用的自己内部的域名实现机制,最后都是交给InetAddress去做DNS解析. 源码分析参考:http://blog.arganzheng.me/p ...

  5. NOI 09:奇数求和

    描述 计算非负整数 m 到 n(包括m 和 n )之间的所有奇数的和,其中,m 不大于 n,且n 不大于300.例如 m=3, n=12, 其和则为:3+5+7+9+11=35. 输入 两个数 m 和 ...

  6. linux--------------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了

    查看SELinux状态: 1./usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态 SELinux status:         ...

  7. c3p0连接池]

    <c3p0-config> <!-- 默认配置 --> <default-config> <property name="jdbcUrl" ...

  8. Android -- OkHttp的简单使用和封装

    1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天就来自我救赎一把,就和大家写写从最基础的OKHttp的简单get.post ...

  9. 夺命雷公狗-----React---23--小案例之react经典案例todos(完成添加任务)

    我们这次来处理用户添加的数据,我们还是赵老规矩看看组建大致图... 子组件对父组建进行数据的传递其实是react内部的机智进行处理的了,, 代码如下所示: <!DOCTYPE html> ...

  10. 学习js回调函数

    <!DOCTYPE HTML> <html> <head> <meta charset="GBK" /> <title> ...