Python在网络通讯方面功能强大,今天学习一下Socket通讯的基本方式,分别是UDP通讯和TCP通讯。

UDP通讯

upd 服务端

 #!/usr/bin/env python
# -*- coding:utf-8 -*- import socket ADDR,PORT = 'localhost',7878
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((ADDR,PORT)) print 'waiting for connection...' while True:
data, addr = sock.recvfrom(1024)
print('Received data:', data, 'from', addr)

upd客户端

 #!/usr/bin/env python
# -*- coding:utf-8 -*- import socket ADDR,PORT = 'localhost',7878
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.sendto(b'hello,this is a test info !',(ADDR,PORT))

先开启server端,等待client端的接入,每请求一次client会打印如下内容

waiting for connection...
('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 57331))
('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 61396))
('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 61261))
('Received data:', 'hello,this is a test info !', 'from', ('127.0.0.1', 54875))

TCP通讯

TCP服务端

 #!/usr/bin/env python
# -*- coding:utf-8 -*- from socket import *
import os ADDR,PORT = 'localhost',7878
sock = socket(AF_INET,SOCK_STREAM)
sock.bind((ADDR,PORT))
sock.listen(5) while True:
conn,addr = sock.accept()
print "new conn:",addr
while True:
print 'waiting for connection'
data = conn.recv(1024)
if not data:
print '客户端已经断开'
break
print '执行指令',data
cmd_res = os.popen(data).read() #为执行传回的指令
if len(cmd_res) == 0:
print 'cmd has no output...' conn.send(str(len(cmd_res)).encode('utf-8')) #发送大小
#client_chk = conn.recv(1024) 解决粘包问题 #wait client to confirm
conn.send(cmd_res)
print 'send done'
conn.close()
sock.close()

TCP客户端

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
from socket import * ADDR,PORT = 'localhost',7878
sock = socket(AF_INET,SOCK_STREAM)
sock.connect((ADDR,PORT))
while True:
data = raw_input('>>')
sock.send(data)
print('发送信息到%s:%s' % (host, data))
cmd_size = sock.recv(1024)
print '命令结果大小 size',cmd_size
sock.send('准备好接收了,可以发了')
received_size = 0
received_data = b''
while received_size < int(cmd_size):
data = sock.recv(1024)
received_size += len(data)
received_data += data
print received_size
else:
print '=================\r\n'
print 'cmd receive done',received_size
print 'receive data:\r\n',received_data sock.close()

python socket 学习的更多相关文章

  1. Python Socket学习之旅(一)

    Socket概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向 网络发出请求或者应答网络请求. s ...

  2. python socket学习

    import socket localip=socket.gethostbyname(socket.gethostname()) print (localip) iplist=socket.getho ...

  3. Python Socket学习之旅(二)

    Socket函数 注解: Socket的close和shutdown--结束数据传输: close-----关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这 ...

  4. Python网络socket学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  5. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  6. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  7. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

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

    文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...

  9. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

随机推荐

  1. win7挂载NFS

    以下是在win7旗舰版下挂载NFS服务的步骤: 1 打开NFS服务 控制面板-->程序-->打开程序和功能-->NFS服务

  2. SAS零散知识总结

    1,变量名命名规范:以字母或者下划线开始,可包含字母.下划线.数字,且不超过32个字符: 2,INFILE用于读取外部数据文件,一般于FILENAME(和LIBNAME用户一致,但路径要精确到文件名( ...

  3. jQuery中给动态添加的元素绑定事件

    $(document).on(event,selector,function(){ //do somethimg here! });

  4. VS2012下配置OpenCV2.4.5

    最近在折腾了一下VS2012的OpenCVS2.4.5配置,同VS2010下基本相同,做个简单的记录,以备日后查阅. 1. 安装OpenCV 从OpenCV官网:http://opencv.org/下 ...

  5. 【转载】CentOS6.5_X64下安装配置MongoDB数据库

    [转载]CentOS6.5_X64下安装配置MongoDB数据库 2014-05-16 10:07:09|  分类: 默认分类|举报|字号 订阅      下载LOFTER客户端 本文转载自zhm&l ...

  6. SDK接入(U8SDK)——SDK抽象层的设计

    上一篇文章,我们总体地分析并设计了一套高效的SDK接入方案,也罗列出这套方案,我们需要完成的工作.这里再罗列并回顾下: 1.统一抽象的SDK接入框架 2.各个SDK接入实现 3.一键打包工具 4.统一 ...

  7. redis/php redis扩展 安装

    作者:silenceper 日期:2013-10-03 原文地址: http://silenceper.com/archives/952.html 我是在CentOS 6.3 中进行的. 使用到的软件 ...

  8. Linux环境下解压超过4GB的zip文件

    今天在Linux服务器中解压一个zip的压缩包,提示如下错误信息: [root@appsrv01 ZIP_BCSA_COURSES]# unzip BCSA_MEDIAS_BAK_20161118.z ...

  9. 在CentOS上搭建svn服务器及注意事项

    系统环境 CentOS 5.9 推荐使用yum install安装,比较简单   一.检查是否已经安装其他版本svn # rpm -qa subversion #卸载svn # yum remove ...

  10. php+redis window

    http://download.csdn.net/detail/qwfy326/6572443 wampserver2.2e-php5.3.13-httpd2.2.22-mysql5.5.24-x64