python socket 学习
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 学习的更多相关文章
- Python Socket学习之旅(一)
Socket概述 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向 网络发出请求或者应答网络请求. s ...
- python socket学习
import socket localip=socket.gethostbyname(socket.gethostname()) print (localip) iplist=socket.getho ...
- Python Socket学习之旅(二)
Socket函数 注解: Socket的close和shutdown--结束数据传输: close-----关闭本进程的socket id,但链接还是开着的,用这个socket id的其它进程还能用这 ...
- Python网络socket学习
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
- Python Socket 网络编程
Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...
- python爬虫学习(1) —— 从urllib说起
0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...
- Python Socket,How to Create Socket Server? - 网络编程实例
文章出自:Python socket – network programming tutorial by Silver Moon 原创译文,如有版权问题请联系删除. Network programin ...
- Python爬虫学习:二、爬虫的初步尝试
我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...
随机推荐
- [.Net] 通过反射,给Enum加备注
今天和大家分享一个给Enum加备注的技巧,话不多说,先上一段代码: namespace TestReflector.Model.Entities { public class UserInfo { p ...
- [LeetCode] 435 Non-overlapping Intervals
Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...
- 转行IT行业的心路历程3
16年丝袜生意很差的一年,老板的态度也不好,大唐本地人太歧视外地人了.而且我干的不开心没有前途,不能体现自我价值,无论你怎么努力. IT技术行业却不是这样,只要你努力肯学习,一定会有回报的. 在16/ ...
- mongodb安装及基础命令
安装mongodb(mongodb-linux-x86_64-3.2.4.tgz)1 export PATH=$PATH:/usr/local/mongodb/bin2 /usr/local/mong ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- list-style
list-style: inside url(" "); 默认li的点在父级div框的外面,在li上加样式list-style-position: inside;可以使点在框内:点 ...
- No prohects are avaliable for deployment to this server
没有项目可用于部署到该服务器的项目或者所有项目都已部署到该服务器或没有发现项目 报错的就是这样的信息,网上看了很多解决方案,比如:http://ttov.blog.163.com/blog/stati ...
- 高性能网站架构设计之缓存篇(1)- Redis的安装与使用
一.什么 Redis REmote DIctionary Server,简称 Redis,是一个类似于Memcached的Key-Value存储系统.相比Memcached,它支持更丰富的数据结构,包 ...
- STC12C5A60S2笔记8(串口)
1. 基本特性 1) 概念 1.1) 并行通信:数据的各位同时进行传输,传输速度快: 1.2)串行通信:通过一根或两根数据线传输数据,数据在信号线上依次传输:串行通信分为同步和异步两种: 1.2.1) ...
- Windows Phone App的dump 文件分析
前言 我们在发布了自己的App以后,Windows Phone的Error Report机制会帮助我们收集程序的崩溃信息并发送到微软的服务器上,这可以辅助开发者提高App的稳定性. 那么如何利用这些d ...