1.客户端向服务端发送

#coding:utf-8
'''客户端'''
import socket
khd=socket.socket() #声明socket类型,同时生产socket连接对象
khd.connect(('localhost',2345)) #连接
khd.send('应用')
data=khd.recv(1024)
print("recv:",data)
khd.close()
#coding:utf-8
'''服务端'''
import socket
fuwud=socket.socket() #()内不写东西的话,代表第一个地址簇AF.INET
fuwud.bind(('localhost',2345)) #绑定要监听端口
fuwud.listen(5) #监听
print"等待中。。。。"
conn,addr=fuwud.accept() #等数据进来
#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址addr对方的地址
print conn,addr
print'开始了!'
data=conn.recv(1024)
print "recv:",data
conn.send(data.upper())
fuwud.close()

先运行服务端再运行客户端

结果:

等待中。。。。
<socket._socketobject object at 0x021BCED8> ('127.0.0.1', 64335)  这里的端口64335是随机的。
开始了!
recv: 应用

注:khd.send(b'holle,world') 这里的byci只解释acssii的数据,发送中文不用添加b

2.服务器接受客户端发来的4次消息后,自动断开。

#coding:utf-8
'''服务端'''
import socket
fuwud=socket.socket()
fuwud.bind(('localhost',2345)) #绑定要监听端口
fuwud.listen(5) #监听
print"等待中。。。。"
while True:
conn,addr=fuwud.accept() #等数据进来
#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址
print conn,addr
print'开始了!'
c=0
while True: data=conn.recv(1024)
print "recv:",data
conn.send(data.upper())
if c>4: #从客户端接受4次 ,服务器端自动断开。
break
c=c+1
print c
fuwud.close()
#coding:utf-8
'''客户端'''
import socket
khd=socket.socket() #声明socket类型,同时生产socket连接对象
khd.connect(('localhost',2345)) #连接
while True:
khd_data=raw_input('>>:') if len(khd_data) == 0:continue #send不能发送空值
khd.send(khd_data)
data=khd.recv(1024) print("recv:",data)
khd.close()

3.服务器端可以实现接受多个线程的信息。

#coding:utf-8
'''服务端'''
import socket
fuwud=socket.socket()
fuwud.bind(('localhost',2345)) #绑定要监听端口
fuwud.listen(5) #监听
print"等待中。。。。"
while True:
conn,addr=fuwud.accept() #等数据进来
#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址
print conn,addr
print'开始了!'
c=0
while True:
data=conn.recv(1024)
print "recv:",data
conn.send(data.upper())
c=c+1
if c>4:
break
print c
fuwud.close()

运行多个客户端。

#coding:utf-8
'''客户端'''
import socket
khd=socket.socket() #声明socket类型,同时生产socket连接对象
khd.connect(('localhost',2345)) #连接
while True:
khd_data=raw_input('>>:')
if len(khd_data) == 0:continue
khd.send(khd_data)
data=khd.recv(1024)
print("recv:",data)
khd.close()

4.服务器、客户端实现系统操作

#coding:utf-8
'''服务端'''
import os
import socket
fuwud=socket.socket()
fuwud.bind(('localhost',2345)) #绑定要监听端口
fuwud.listen(5) #监听
print"等待中。。。。"
while True:
conn,addr=fuwud.accept() #等数据进来
#conn就是客户端连过来而在服务端为其生成的一个连接实例,连接标志。addr对方的地址
print conn,addr
print'开始了!'
c=0
while True:
data=conn.recv(1024)
print "recv:",data
res=os.popen(data).read()
conn.send(res)
c=c+1
if c>4:
break
print c
fuwud.close()
#coding:utf-8
'''客户端'''
import socket
khd=socket.socket() #声明socket类型,同时生产socket连接对象
khd.connect(('localhost',2345)) #连接
while True:
khd_data=raw_input('>>:')
if len(khd_data) == 0:continue
khd.send(khd_data)
data=khd.recv(1024)
print("recv:",data)
khd.close()

5.服务端:

sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0)

参数一:地址簇

  socket.AF_INET IPv4(默认)
  socket.AF_INET6 IPv6

  socket.AF_UNIX 只能够用于单一的Unix系统进程间通信

参数二:类型

  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 可靠的连续数据包服务

参数三:协议

  0  (默认)与特定的地址家族相关的协议,如果是 0 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议

具体参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html

import socket
server=socket.socket(AF_INET,sock.SOCK_STREAM)
server.bind(localhost,9999) 绑定端口监听
server.listen()
while true: #可以接受新的链接
conn,addr=server.accept()#阻塞
while true:
data=conn.recv(8192)#recv默认是阻塞的
if not data:
  break #避免客户端断开,conn.recv收到的是空数据
conn.send(data.upper())#如果发送出去

python socket实例的更多相关文章

  1. python socket实例练习

    Web Server是基于Socket编程,又称之为网络编程,socket是网络编程接口,socket可以建立网络连接,读数据,写数据.socket模块定义了一些常量参数,用来指定socket的的地址 ...

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

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

  3. Python Socket,How to Create Socket Cilent? - 网络编程实例

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

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

    python 编写server的步骤: 1. 第一步是创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type ) family参 ...

  5. Python socket编程之二:【struct.pack】&【struct.unpack】

    import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...

  6. Python Socket通信原理

    [Python之旅]第五篇(一):Python Socket通信原理   python Socket 通信理论 socket例子 摘要:  只要和网络服务涉及的,就离不开Socket以及Socket编 ...

  7. Python Socket单线程+阻塞模式

    Python之旅]第五篇(二):Python Socket单线程+阻塞模式 python Socket单线程 Socket阻塞模式 串行发送 摘要:  前面第五篇(一)中的一个Socket例子其实就是 ...

  8. python/socket编程之粘包

    python/socket编程之粘包 粘包 只有TCP有粘包现象,UDP永远不会粘包. 首先需要掌握一个socket收发消息的原理 发送端可以是1k,1k的发送数据而接受端的应用程序可以2k,2k的提 ...

  9. Python Socket请求网站获取数据

     Python Socket请求网站获取数据 ---阻塞 I/O     ->收快递,快递如果不到,就干不了其他的活 ---非阻塞I/0 ->收快递,不断的去问,有没有送到,有没有送到,. ...

随机推荐

  1. JSON字符串

    原因:由于之前接触的JSON都是字符串与数组之间的转化,思维定式认为JSON只是字符串与数组的转化 这个原因是错误的 首先 JSON 是一种语法,用来序列化对象.数组.数值.字符串.布尔值和 null ...

  2. JavaSE--【JAVA】unicode为12288字符

    转载:http://blog.csdn.net/zfpigpig/article/details/8186470 今天做一个导入数据功能时发现一个问题,就是一个unicode为12288的字符显示为空 ...

  3. xls文件转化txt

    xls文件转化txt # -*- coding:utf-8 -*- # 安装pywin32包 http://sourceforge.net/projects/pywin32/files/pywin32 ...

  4. 吴裕雄--天生自然 PYTHON3开发学习:输入和输出

    str = input("请输入:"); print ("你输入的内容是: ", str) # 打开一个文件 f = open("/tmp/foo.t ...

  5. DFS-BFS(深搜广搜)原理及C++代码实现

    深搜和广搜是图很多算法的基础,很多图的算法都是从这两个算法中启发而来. 深搜简单地说就是直接一搜到底,然后再回溯,再一搜到底,一直如此循环到没有新的结点. 广搜简单地说就是一层一层的搜,像水的波纹一样 ...

  6. JavaScript之Date常用知识点

    1.new Date(dateStr) :把字符串转换为Date对象 参数: ①dateStr {string} :可转换为Date对象的字符串(可省略时间):字符串的格式主要有两种: 1) yyyy ...

  7. 如何使用 babel

    babel-cli 在项目内运行 babel-cli 配置.babelrc 配置.jshintrc Babel 用于将 ES6 的代码转化为 ES5,使得 ES6 可以在目前的浏览器环境下使用.学习使 ...

  8. K - Wand(组合数+错排公式)

    N wizards are attending a meeting. Everyone has his own magic wand. N magic wands was put in a line, ...

  9. O - 覆盖的面积(线段树+扫描线)

    给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1& ...

  10. php中的几种四舍五入取整、向上取整、向下取整、小数截取方法

    echo intval(4.5);echo "<br />";//直接取整,舍弃小数保留整数echo round(4.5);echo "<br /> ...