python网络编程-socket

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()

来自为知笔记(Wiz)

时间: 2024-09-26 23:55:29

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

python网络编程——socket进阶篇(select/poll/epoll)

原 生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收数据(调用recv)时也是阻塞的.原生 socket服务端在同一时刻只能处理一个客户端请求,即服务端不能同时与多个客户端进行通信,实现并发,导致服务端资源闲置(此时服务端只占据 I/O,CPU空闲). 现在的需求是:我们要让多个客户端连接至服务器端,而且服务器端需要处理来自多个客户端请求.很明显,原生socket实现不了这种需求,此时我们该采用什么方式来处理呢? 解决方法:采用I/O多路复

python网络编程socket (一)

提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级阶段,程序员走到今天,已经脱离了手工打造一切,要自己实现所有细节的年代.现在提倡的是不要重复造轮子,而是学习别人的轮子怎么用,只有那些有需求或能专研的人才去设计轮子甚至汽车,so,这是一个速成的年代. 因此,对于一个面向工作的python程序员,学习python的网络编程,其实学的就是那么几个模块,

Python网络编程—socket(一)

从今天开始python基础就介绍完毕了,下面我们将进阶到socket网络编程的介绍,那么socket是什么呢?我们带着这个问题开始今天的介绍: 一.socket初探 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket其实也是一种特殊的文件,一些socket函数就是对其进行的操作(读/写.打开.关闭) 那么socket对文件操作和file对文件操作有什么区别呢? fil

Python 网络编程——socket

一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 Web 服务器.一台机器里放一些网页或 Web 应用程序,然后启动 服务.这样的服务器的任务就是接受客户的请求,把网页发给客户(如用户计算机上的浏览器),然 后等待下一个客户请求.这些服务启动后的目标就是“永远运行下去”.虽然它们不可能实现这样的 目标,但只要没有关机或硬件出错等外力干扰,它们就能运

Python网络编程-Socket简单通信

学习python中使用python进行网络编程,编写简单的客户端和服务器端进行通信,大部分内容来源于网络教程,这里进行总结供以后查阅. 先介绍下TCP的三次握手: 1,简单的发送消息: 服务器端: import socket sk = socket.socket() ip_port = ("127.0.0.1", 8888) sk.bind(ip_port) sk.listen(5) print("正在进行等待接受数据...") conn, address = sk

Python 网络编程socket大全 用途---用于客户端和服务器端之间相互通讯

本章目录 一.什么是socket 二.为什么需要socket 三.socket的发展 四.python中的socket 五.基于TCP的socket 六.基于UDP的socket 六. 粘包问题详解 七.粘包的解决方案 八.socketserver实现并发通讯 **引入:为什么一定要先学习网络协议?** 之所以学习网络编程就是为了让我们的程序能够利用网络来传输数据,开发出C/S构架的应用程序 而网络的核心,就是协议,没有协议就没有互联网,我们要开发出C/S结构程序则必须遵循这些协议的标准! `就

Python网络编程—socket套接字编程(UDP)

套接字介绍 1.套接字 : 实现网络编程进行数据传输的一种技术手段 2.Python实现套接字编程:import socket 3.套接字分类 流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案.(面向连接--tcp协议--可靠的--流式套接字) 数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案.(无连接--udp协议--不可靠--数据报套接字) UDP套接字编程 服务端流程 1.创建数据报套接字 sockfd = socket

Python网络编程—socket套接字编程(TCP)

套接字介绍 1.套接字 : 实现网络编程进行数据传输的一种技术手段 2.Python实现套接字编程:import socket 3.套接字分类 流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案.(面向连接--tcp协议--可靠的--流式套接字) 数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案.(无连接--udp协议--不可靠--数据报套接字) tcp套接字 服务端流程 1.创建套接字 sockfd=socket.socket

python网络编程——socket进阶篇

1 IO多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. linux中的IO多路复用     (1)select     select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作.     select目前几乎在所有的平台上支持