python中的socket模块
熟悉了一下python的socket模块,感觉还是有点好玩的,不过坑也也是不少的。
1、服务器端代码
#!/usr/bin/env python import socket HOST='192.168.1.60'
PORT=55555 s = socket.socket()
s.bind((HOST,PORT))
s.listen(10)
while True:
conn,addres = s.accept()
conn.send('HELLO')
while True:
data = conn.recv(1024)
print data,addres
if data =='exit':
print 'byebye'
break
if not data.strip():
continue
flag = True
while flag:
info = raw_input('Answer:>>')
if info.strip():
flag=False
conn.sendall(' %s' % info)
conn.close()
主要是创建一个服务端,在创建服务端的时候,主要步骤如下:
创建socket对象socket——》绑定IP地址和端口bind——》监听listen——》得到请求accept——》接收请求recv——》发送信息send——》关闭close
2、 客户端代码
#!/usr/bin/env python
import socket HOST='192.168.1.60'
PORT=55555 s = socket.socket()
s.connect((HOST,PORT))
while True:
data = s.recv(1024)
if data.strip():
print 'Replay is ',data
flag = True
while flag:
kel = raw_input('Question :>>')
print 'raw_input values : %r' % kel
if kel.strip():
flag=False
s.sendall(kel)
if kel == 'exit':
break
s.close()
客户端代码就是连接服务器,接收和发送消息,具体流程如下:
创建socket对象socket——》connet连接服务器——》获取消息recv——》发送消息send——关闭close
3、 基本方法描述
在使用socket模块的时候,创建对象一般是使用如下的代码:
s = socket.socket()
在使用默认值的时候,表示创建的是TCP 的socket,地址家族表示为socket.AF_INET,socket类型默认值为socket.SOCK_STREAM表示为TCP的,而UDP的为socket.SOCK_DGRAM,表示为数据包
绑定的代码如下:
s.bind((IP,port))
注意在绑定的时候,参数只有一个表示为元组tuple,其中第一个元素为ip地址或者是hostname,第二个参数为port端口号,也就是开始监听哪个IP地址的哪个端口
监听的代码如下:
s.listen(5)
其中的参数为整数,5表示阻塞五个连接,实际上,,经过测试,十几个都没问题,主要是阻塞式的,当有一个连接上的时候,那么其他的都不会连接上,只有在第一个推出的时候,其他的才能进行连接,开始还以为是可以同时连接五个,然后测试下,发现不行,无论是同一个服务器上还是不同的机器上,是不能同时进行连接的,也就是所谓的阻塞式。
被动接受请求的代码如下:
conn,addres = s.accept()
返回的是一个元组,也就是在接受客户端的连接,返回的第一个元素是一个socket对象,可以认为是客户端的socket对象,address表示为客户端的地址,其实这个也就使用和客户端进行通信的。
客户端连接服务器端的代码如下:
s.connect((ip,port))
参数为服务器的IP地址和服务器监听的端口。
发送消息的代码如下:
conn.send('string is send')
conn.sendall('send')
l两个都是用来发送消息的,区别就是sendall尽量一次发送,而send的话主要看接收能力,如果超出范围的话,那么会进行发送两次进行发送
接收消息的代码如下:
conn.recv(1024)
主要方法是recv方法表示接收消息,最多接收的字节数为1024,那么多余的字符将会在下次接收的过程中进行接收。
4、运行客服端和服务端
在运行客户端和服务端代码之后,发现是可以交互的,也就是客户端和服务端进行说话,就想其他的一些交流软件一样,注意,在上述的代码中还存在一些bug,并不是指异常处理
在上述的代码中,主要的思路就是如果客户端输入为空,那么会一直输入,除非输入exit,那么退出,输入了字符之后,才会发送到服务端
如果服务端回复为空,那么会要求服务端一直输入,输入字符后发送给客户端,如果客户端退出,那么断开连接,继续监听。
python中的socket模块的更多相关文章
- Python中的socket 模块
Python 提供了两个基本的 socket 模块.第一个是 Socket,它提供了标准的 BSD Sockets API.第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务 ...
- 浅析Python中的struct模块
最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...
- python中的select模块
介绍: Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...
- 【转】浅析Python中的struct模块
[转]浅析Python中的struct模块 最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概 ...
- python中的logger模块
logger 提供了应用程序可以直接使用的接口handler将(logger创建的)日志记录发送到合适的目的输出filter提供了细度设备来决定输出哪条日志记录formatter决定日志记录的最终输出 ...
- 深入理解python中的select模块
简介 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kque ...
- Python 中 logging 日志模块在多进程环境下的使用
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 中 logging 日志模块在多进程环境下的使用 使用 Pytho ...
- Python中使用os模块执行远程命令
1. 使用os模块远程执行命令 服务端代码 1 import socket 2 import os 3 4 sh_server = socket.socket() #创建一个socket对象 5 sh ...
- Python中的random模块,来自于Capricorn的实验室
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
随机推荐
- 【剑指offer】二叉搜索树转双向链表,C++实现
原创博文,转载请注明出处! # 题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 二叉树节点的定义 struct TreeNod ...
- Jmeter-BeanShell Sampler调用java代码
1.添加BeanShell Sampler 2.编写BeanShell Sampler代码 3.引用参数 ${id}
- test20190320
全连 \(n\leq 10^6\) ,保证答案在 \(long\ long\) 范围内. 比较浅显的 \(dp\ ?\) 记 \(f[i]\) 表示考虑前 \(i\) 个音符,其中第 \(i\) 个 ...
- 如何组织一个同时面向 UWP/WPF/.Net Core 控制台的 C# 项目解决方案
希望写一个小型工具,给自己和需要的人.考虑到代码尽可能的复用,我准备采用 .Net Standard 来编写大多数核心代码,并基于 .Net Core 编写跨平台控制台入口,用 WPF 编写桌面端 U ...
- cocos2d js jsb XMLHttpRequest 中文乱码
1.首先讲下怎样使用XMLHttpRequest 下面所说的是在cocos2d-x 2.2.2 或者 2.3 版本号中. 首先要明确cocos2d js事实上分两个版本号,一个是html5的版本号,另 ...
- 利用mysqldump备份mysql
mysqldump备份机制:通过给定的参数信息和系统表数据,来一张表一张表地获取数据并生成insert语句插入备份文件中,这样由于时间点不一致,就会导致数据不一致,然而对于一个要求强一致性的系统来说, ...
- 笔记:服务器压缩方案 来源于 Accept-Encoding: gzip, deflate 问题
笔记:服务器压缩方案 来源于 Accept-Encoding: gzip, deflate 问题 事情起因:odoo demo 没有启动web 压缩 目前流行的 web 压缩技术 gzip br 支持 ...
- HDFS(三)
DataNode 下面的数据文件有两种类型,一种是数据块,一种是数据块的描述文件(元数据文件),后者文件后面带有.meta后缀: Version文件字段内容其实和NameNode里面涵义是一致的: 安 ...
- mysql的三种安装方式(详细)
安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...
- Unit08: 过滤器、监听器
Unit08: 过滤器.监听器 下面这些小案例主要演示的filter的执行时机: web package web; import java.io.IOException; import javax.s ...