socket编程介绍

Python 提供了两个基本的 socket 模块。

第一个是 Socket,它提供了标准的 BSD Sockets API。

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

下面讲的是Socket模块功能

1、Socket 类型

套接字格式:

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


socket类型


描述


socket.AF_UNIX


只能够用于单一的Unix系统进程间通信


socket.AF_INET


服务器之间网络通信


socket.AF_INET6


IPv6


socket.SOCK_STREAM


流式socket , for TCP


socket.SOCK_DGRAM


数据报式socket , for UDP


socket.SOCK_RAW


原始套接字,普通的套接字无法处理ICMP、IGMP等网络报文,而SOCK_RAW可以;其次,SOCK_RAW也可以处理特殊的IPv4报文;此外,利用原始套接字,可以通过IP_HDRINCL套接字选项由用户构造IP头。


socket.SOCK_SEQPACKET


可靠的连续数据包服务


创建TCP Socket:


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


创建UDP Socket:


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

2、Socket 函数

注意点:

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

2)服务端与客户端不能直接发送列表,元组,字典。需要字符串化repr(data)。


socket函数


描述


服务端socket函数


s.bind(address)


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


s.listen(backlog)


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


s.accept()


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


客户端socket函数


s.connect(address)


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


s.connect_ex(adddress)


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


公共socket函数


s.recv(bufsize[,flag])


接受TCP套接字的数据。数据以字符串形式返回,bufsize指定要接收的最大数据量。flag提供有关消息的其他信息,通常可以忽略。


s.send(string[,flag])


发送TCP数据。将string中的数据发送到连接的套接字。返回值是要发送的字节数量,该数量可能小于string的字节大小。


s.sendall(string[,flag])


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


s.recvfrom(bufsize[.flag])


接受UDP套接字的数据。与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。


s.sendto(string[,flag],address)


发送UDP数据。将数据发送到套接字,address是形式为(ipaddr,port)的元组,指定远程地址。返回值是发送的字节数。


s.close()


关闭套接字。


s.getpeername()


返回连接套接字的远程地址。返回值通常是元组(ipaddr,port)。


s.getsockname()


返回套接字自己的地址。通常是一个元组(ipaddr,port)


s.setsockopt(level,optname,value)


设置给定套接字选项的值。


s.getsockopt(level,optname[.buflen])


返回套接字选项的值。


s.settimeout(timeout)


设置套接字操作的超时期,timeout是一个浮点数,单位是秒。值为None表示没有超时期。一般,超时期应该在刚创建套接字时设置,因为它们可能用于连接的操作(如connect())


s.gettimeout()


返回当前超时期的值,单位是秒,如果没有设置超时期,则返回None。


s.fileno()


返回套接字的文件描述符。


s.setblocking(flag)


如果flag为0,则将套接字设为非阻塞模式,否则将套接字设为阻塞模式(默认值)。非阻塞模式下,如果调用recv()没有发现任何数据,或send()调用无法立即发送数据,那么将引起socket.error异常。


s.makefile()


创建一个与该套接字相关连的文件

3、socket编程思路

TCP服务端:

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

# 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 创建套接字,连接远端地址

# socket.socket(socket.AF_INET,socket.SOCK_STREAM) , s.connect()

2 连接后发送数据和接收数据          # s.sendall(), s.recv()

3 传输完毕后,关闭套接字          #s.close()

4、Socket编程之服务端代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

[email protected]:/python# catday5-socket-server.py

#!/usr/bin/python

import socket   #socket模块

import commands   #执行系统命令模块

HOST=‘10.0.0.245‘

PORT=50007

s= socket.socket(socket.AF_INET,socket.SOCK_STREAM)   #定义socket类型,网络通信,TCP

s.bind((HOST,PORT))   #套接字绑定的IP与端口

s.listen(1)         #开始TCP监听

while 1:

       conn,addr=s.accept()   #接受TCP连接,并返回新的套接字与IP地址

       print‘Connected by‘,addr    #输出客户端的IP地址

       while 1:

                data=conn.recv(1024)    #把接收的数据实例化

               cmd_status,cmd_result=commands.getstatusoutput(data)   #commands.getstatusoutput执行系统命令(即shell命令),返回两个结果,第一个是状态,成功则为0,第二个是执行成功或失败的输出信息

                if len(cmd_result.strip()) ==0:   #如果输出结果长度为0,则告诉客户端完成。此用法针对于创建文件或目录,创建成功不会有输出信息

                        conn.sendall(‘Done.‘)

                else:

                       conn.sendall(cmd_result)   #否则就把结果发给对端(即客户端)

conn.close()     #关闭连接

5、Socket编程之客户端代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

[email protected]:/python# catday5-socket-client.py

#!/usr/bin/python

import socket

HOST=‘10.0.0.245‘

PORT=50007

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)      #定义socket类型,网络通信,TCP

s.connect((HOST,PORT))       #要连接的IP与端口

while 1:

       cmd=raw_input("Please input cmd:")       #与人交互,输入命令

       s.sendall(cmd)      #把命令发送给对端

       data=s.recv(1024)     #把接收的数据定义为变量

        print data         #输出变量

s.close()   #关闭连接

时间: 2024-10-07 06:00:39

socket编程介绍的相关文章

python socket编程介绍

一.概述 socket 通常被称作“套接字”,用于描述IP地址和端口,是通讯链的句柄,应用程序通过socket向网络发送请求或者回应网络的请求. socket起源于UNIX,在linux.UNIX中“一切皆文件”,对于文件用 打开.读写.关闭 模式来操作.socket就是该模式的一个实现,是一种特殊的文件.一些socket函数就是对其进行的操作(读IO.写IO.打开.关闭) socket和file的区别: file模块是针对某个指定文件进行 打开.读写.关闭 socket模块是针对服务器端和客户

[转]C++ Socket编程

C++ Socket 编程 介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等… 好在我已经将这些事完成了,我将和所有人共享我的知识了.如果你了解 C 语言并想穿过网络编程的沼泽,那么你来对地方了. 读者对象 这个文档是一个指南,而不是参考书.如果你刚开始 socket 编程并想找一本入门书,那么你是我的读者.但这不是一本完全的 socket 编程书

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

<转>Socket编程——基础介绍

最近系统的看了下unix网络编程的一些内容,对socket的理解有了进一步的加深,在看APUE的时候,那会儿看socket上面介绍的比较少,只是模糊的懂了如何去写一个简单的TCP服务端和客户端,对其中一些注意的点,以及实现的原理没有过多的去研究.这是我自己总结的socket编程的第一篇,基本就是介绍一些基础性的东西. 这个只是在IPV4上的一些socket编程,对于IPV6暂不涉及.下面对unix网络编程卷一第三版简称为unpV13e 地址结构 提到地址结构我们一般使用的是最基本的地址结构.IP

基于Socket的UDP和TCP编程介绍

一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(streamsocket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户—服务器程序设计基本框架 说明:(三路握手)         1.客户端发

基于 Socket 的 UDP 和 TCP 编程介绍

基于 Socket 的 UDP 和 TCP 编程介绍 一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(stream socket)的一种. UDP:用户数据报协议.UDP是一种无连接协议.UDP套接口是数据报套接口(datagram socket)的一种. 二.TCP和UDP介绍 1)基本TCP客户-服务器程序设计基本

python socket编程详细介绍

Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 下面讲的是Socket模块功能 1.Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编号(默认为0)来创建套接字. socket类型 描述 socket.AF_UNIX 只能够用于单一的Unix系统进程

Python 006- python socket编程详细介绍

转自https://blog.csdn.net/rebelqsp/article/details/22109925 Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发. 下面讲的是Socket模块功能 1.Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族.套接字类型.协议编

iOS开发——网络编程OC篇&Socket编程

Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议   对应于应用层 tcp协议    对应于传输层 ip协议     对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要