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. Java程序,猜大小游戏

    一个骰子,通常有1.2.3.4.5.6等6种点数.我们将1.2.3记作“小”,将4.5.6记作“大”.猜中显示“猜对了”,猜错记作“猜错了”之类的字样.本程序可以用Java实现. import jav ...

  2. Mini projects #7 ---- Spaceship

    课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...

  3. [转]Redis之七种武器

    长生剑.孔雀翎.碧玉刀.多情环.离别钩.霸王枪.拳头是古龙笔下的七种武器,而本文打算将Redis的几种使用方式 Strings.Hashs.Lists.Sets.Sorted Sets.Pub/Sub ...

  4. PHP内核探索:数组与链表

    在C语言中,我们可以自定义各种各样的数据结构,用来把很多数据保存在一个变量里面,但是每种数据结构都有自己的优缺点,PHP内核规模如此庞大,是否已经找到了一些非常棒的解决方法呢? 我们在选择各种数据结构 ...

  5. UOJ#34 FFT模板题

    写完上一道题才意识到自己没有在博客里丢过FFT的模板-- 这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞-- 所以我就直 ...

  6. angular文件引入带来的绑定问题

    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script ...

  7. struts2.5框架使用通配符指定方法常见错误

    struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace ...

  8. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

  9. mysql group_concat 使用 (按分组组合字段)

    语法: GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DES ...

  10. HTML5-格式化

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...