python 网络通讯 plc_Python TCP通信网络编程

最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程。

1. Socket网络编程

Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。

2. 客户端

大多数连接都是可靠的TCP连接。创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器。举个例子,当我们在浏览器中访问新浪时,我们自己的计算机就是客户端,浏览器会主动向新浪的服务器发起连接。如果一切顺利,新浪的服务器接受了我们的连接,一个TCP连接就建立起来的,后面的通信就是发送网页内容了。

3. 服务器和客户端之间Socket通信

主要实现了服务器和客户端之间的Socket通信:

服务器

服务器进程首先要绑定一个端口并监听来自其他客户端的连接。如果某个客户端连接过来了,服务器就与该客户端建立Socket连接,随后的通信就靠这个Socket连接了。

所以,服务器会打开固定端口(比如80)监听,每来一个客户端连接,就创建该Socket连接。由于服务器会有大量来自客户端的连接,所以,服务器要能够区分一个Socket连接是和哪个客户端绑定的。一个Socket依赖4项:服务器地址、服务器端口、客户端地址、客户端端口来唯一确定一个Socket。

但是服务器还需要同时响应多个客户端的请求,所以,每个连接都需要一个新的进程或者新的线程来处理,否则,服务器一次就只能服务一个客户端了。

(1)引入模块

1 #-*- coding: utf-8 -*-

2 """

3 Created on Mon Mar 28 22:28:29 20164 @author: zhanghc5 """

6 #引入模块

7 importsocket8 importthreading9 import time

(2)创建socket,并监听端口

1 #创建socket

2 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)3

4 #监听端口

5 s.bind(('127.0.0.1',9999))6 s.listen(5)7 print 'Waiting for connection...'

(3)服务器端创建循环,永久监听来自客户端的连接

1 whileTrue:2

3 #接受一个新连接

4 sock,addr=s.accept()5

6 #创建新线程来处理TCP连接

7 t=threading.Thread(target=tcplink(sock,addr))

(4)创建TCP连接函数,每个连接创建一个新线程

1 deftcplink(sock,addr):2 print 'Accept new connection from %s:%s...' %addr3 sock.send('Welcome!')4 whileTrue:5 data=sock.recv(1024)6 time.sleep(1)7 if data=='exit' or notdata:8 break

9 sock.send('Hello,%s!'%data)10 sock.close()11 print 'Connection from %s:%s closed.'%addr

客户端程序如下:

1 #-*- coding: utf-8 -*-

2 """

3 Created on Mon Mar 28 22:40:41 20164

5 @author: zhanghc6 """

7

8 importsocket9

10 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)11

12 s.connect(('127.0.0.1',9999))13

14 print s.recv(1024)15

16 for data in ['zhang','liu','wang']:17 s.send(data)18 print s.recv(1024)19

20 s.send('exit')21 s.close()

最后,需要启动两个程序,服务器和客户端 来验证,结果如下

780430-20160328232321926-1171156965.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值