Python-socket总结

socket是什么

什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。

应用程序通常通过"套接字"向网络发出请求或者应答网络请求。说白了就是一种通信机制。

列入你和移动客服咨询问题时,会有一个客服为你解决问题一样,就是你和客服间的相互通信

在socket里就是“发送”和“接收”这两个动作就是socket通信方式

socket.gethostname()     # 获取主机名

from socket import *     # 避免 socket.socket()

s=socket()

s.bind()         # 绑定地址到套接字

s.listen()       # 开始TCP监听

s.accept()       # 被动接受TCP客户端连接,等待连接的到来

s.connect()       # 主动初始化TCP服务器连接

s.connect_ex()   # connect()函数的扩展版本,出错时返回出错码,而不是跑出异常

s.recv()         # 接收TCP数据

s.send()         # 发送TCP数据

s.sendall()       # 完整发送TCP数据

s.recvfrom()     # 接收UDP数据

s.sendto()       # 发送UDP数据

s.getpeername()   # 连接到当前套接字的远端的地址(TCP连接)

s.getsockname()   # 当前套接字的地址

s.getsockopt() # 返回指定套接字的参数

s.setsockopt()   # 设置指定套接字的参数

s.close()         # 关闭套接字

s.setblocking()   # 设置套接字的阻塞与非阻塞模式

s.settimeout()   # 设置阻塞套接字操作的超时时间

s.gettimeout()   # 得到阻塞套接字操作的超时时间

s.filen0()       # 套接字的文件描述符

s.makefile()     # 创建一个与该套接字关联的文件对象

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_RDM   # 是一种可靠的UDP形式,即保证交付数据报但不保证顺序。SOCK_RAM用来提供对原始协议的低级访问,在需要执行某些特殊操作时使用,如发送ICMP报文。SOCK_RAM通常仅限于高级用户或管理员运行的程序使用。

socket.SOCK_SEQPACKET # 可靠的连续数据包服务

基础讲解

# 创建socket对象

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

# 监听端口

sock.bind((‘127.0.0.1‘,8001))

# 开始监听,

sock.listen(5)

while True:

# 阻塞,deng 。。。。

# 直到有请求连接

print ‘....‘

connection, address = sock.accept()

# connection,代表客户端socket对象,

# address,客户端IP地址

#handle_request(connection)

buf = connection.recv(1024)

print buf

connection.send("HTTP/1.1 200 OK\r\n\r\n")

connection.send("Hello, World")

connection.close()

#服务端

import socket

HOST=‘‘  #空代表0.0.0.0

PORT= 50007  #监听端口

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

s.bind((HOST,PORT))

s.listen(1)

while True:

conn,addr= s.accept()

print‘Connected by‘, addr

while  True:

data = conn.recv(1024) #接收1024字节数据

if not data: break     #如果收不到客户端数据了(代表客户端断开了),就断开

conn.sendall(data.upper())    #将收到的数据全变成大写再发给客户端

conn.close() #关闭此客户端的连接实例

#客户端

import socket

HOST=‘‘

PORT= 6666  #监听端口

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

s.bind((HOST,PORT))

s.listen(1)

while True:

conn,addr= s.accept()

print‘Connected by‘, addr

while  True:

data = conn.recv(1024) #接收1024字节数据

if not data: break     #如果收不到客户端数据了(代表客户端断开了),就断开

conn.sendall(data.upper())    #将收到的数据全变成大写再发给客户端

conn.close() #关闭此客户端的连接实例

#以上例子是单线程的只能一对一的服务,即服务端只能处理一个链接,想要处理多线程怎么办,不用急多线程的Python已给我们写好直接调用就好

socket服务端

#用于处理多线程的模块

import SocketServer

import os

class MyTCP(SocketServer.BaseRequestHandler):

def handle(self):

while True:

self.data=self.request.recv(1024).strip() #接受数据

if self.data == ‘quit‘ or not self.data:break #如果没有数据或为quit 退出

cmd_data=os.popen(self.data).read() #将命令结果存为字符串

if cmd_data == ‘‘:cmd_data= self.data + ‘: Command not found‘ #如果命令结果为空或命令返回为空

self.request.sendall(cmd_data) #发送所有的数据

if __name__ == ‘__main__‘:

HOST,PORT = ‘127.0.0.1‘,6666 #绑定端口和ip

server = SocketServer.ThreadingTCPServer((HOST,PORT),MyTCP) #将写的类加入多线程处理

server.serve_forever() #循环启动

socket客户端

import socket

HOST=‘127.0.0.1‘

PORT=6666

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #服务期间的TCP通信

s.connect((HOST,PORT)) #绑定端口和ip

while True:

while True: #如果命令为空继续输入

cmd=raw_input(‘CMD:‘).strip()

if cmd != ‘‘:break

s.sendall(cmd) #发送所有数据

data=s.recv(1024).split(‘\n‘) #以换行符分割接收的数据

print ‘cmd:‘

for line in data:print line #循环打印数据

s.close() #关闭套接字

时间: 2024-10-10 13:38:42

Python-socket总结的相关文章

Python Socket 编程——聊天室演示样例程序

上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和client的代码了解主要的 Python Socket 编程模型.本文再通过一个样例来加强一下对 Socket 编程的理解. 聊天室程序需求 我们要实现的是简单的聊天室的样例,就是同意多个人同一时候一起聊天.每一个人发送的消息全部人都能接收到,类似于 QQ 群的功能,而不是点对点的 QQ 好友之间的聊天.例如以下图: 图来自:http://www.ibm.com/developerworks/linux/tu

Python Socket,How to Create Socket Server? - 网络编程实例

文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programing in Python: Part2: Programing sockets servers. 在所有的通信实例中,都分为Client 和Server. 其中:Client是请求的发起点,Server是使用Socket接收传入的值并且提供返回数据. Server的职能如下: 1>.创建/打开一个so

python socket和HTTP入门

python迭代器: iterator=iter(obj) iterator.next() python函数: def function(*args): 传元组列表参数. def function(**args): 传字典列表参数. Django时区设置:setting.py里面的time_zone=Asian/Shanghai PostgreSQL时区设置:postgres.conf配置文件修改time_zone=Asian/Shanghai python socket模块: 服务器端: im

python socket编程入门(编写server实例)+send 与sendall的区别与使用方法

python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参数代表地址家族,可为AF_INET或AF_UNIX.AF_INET家族包括Internet地址,AF_UNIX家族用于同一台机器上的进程间通信. type参数代表套接字类型,可为SOCK_STREAM(流套接字)和SOCK_DGRAM(数据报套接字). 2. 第二步是将socket绑定到指定地址.这

【Python之旅】第五篇(一):Python Socket通信原理

只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理. 1.Socket socket也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.可以列举中国移动或者是中国电信等的电话客服,当然,也可以看下面的图片来作形象的说明. socket起源于Unix,而Unix/Linux基本哲学之一就是:一切皆文件,即都可以用"打开open-

python/socket编程之粘包

python/socket编程之粘包 粘包: 只有TCP有尿包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提取数据,当然也有可能是3k或者多k提取数据,也就是说,应用程序是不可见的,因此TCP协议是面来那个流的协议,这也是容易出现粘包的原因而UDP是面向笑死的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任一字节的数据,这一点和TCP是很同的.怎样定义消息呢?认为对方一次

python socket 超时设置 errno10054

python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以会被那个网站认定为攻击行为.有时就不再允许下载.导致urlopen()后,request.read()一直卡死在那里.最后会抛出errno 10054. 这 个错误是connection reset by peer.也就是传说的远端主机重置了此连接.原因可能是socket超时时间过长:也可能是req

Python Socket 网络编程

Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用 Python 进行 TCP Socket 网络编程,假设你已

python socket windows防火墙设置问题

python socket 在本机跑成功后 在服务器端 将服务器端的代码放上去 却发现 跑不动 关掉服务器的windows 防火墙 就没有问题了 可以跑 但是 担心不安全:在服务器防火墙的高级安全设置 里面 新建 入站规则 选择 端口  然后 现在TCP 和连接的端口 就ok啦

python socket模拟游戏开服

python socket服务端 #!/usr/bin/python #-*- coding: utf-8 -*- import socket import os,sys host='127.0.0.1' #监听的IP port=60000       #监听的端口 buffer=1024      #接受的字节数 sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #建立socket对象 sock.bind((host,port)) #