Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务
端用有很多模块可以使用,如下:
1、客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/9/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程客户端,python3.6.2
'''
import socket,sys
HOST = '192.168.1.6'
PORT = 8998
ADDR = (HOST,PORT)
BUFSIZE = 1024
sock = socket.socket()
try :
sock.connect(ADDR)
print ( 'have connected with server' )
while True :
data = input ( 'lockey# ' )
if len (data)> 0 :
print ( 'send:' ,data)
sock.sendall(data.encode( 'utf-8' )) #不要用send()
recv_data = sock.recv(BUFSIZE)
print ( 'receive:' ,recv_data.decode( 'utf-8' ))
else :
sock.close()
break
except Exception:
print ( 'error' )
sock.close()
sys.exit()
|
2、SocketServer模块
为了能够让多个客户端同时接入服务并进行通信,服务端将使用SocketServer模块来实现,这样的话用户不用在子线程结束后,利用父进程对它进行处理,也不用关心socket的关闭,一切都由SocketServer来完成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#!/usr/bin/env python
#coding:utf-8
'''
file:client.py
date:9/9/17 3:43 PM
author:lockey
email:lockey@123.com
desc:socket编程服务器端,python3.6.2
'''
from socketserver import BaseRequestHandler,ThreadingTCPServer
import threading
BUF_SIZE = 1024
class Handler(BaseRequestHandler):
def handle( self ):
address,pid = self .client_address
print ( '%s connected!' % address)
while True :
data = self .request.recv(BUF_SIZE)
if len (data)> 0 :
print ( 'receive=' ,data.decode( 'utf-8' ))
cur_thread = threading.current_thread()
#response = '{}:{}'.format(cur_thread.ident,data)
self .request.sendall( 'response' .encode( 'utf-8' ))
print ( 'send:' , 'response' )
else :
print ( 'close' )
break
if __name__ = = '__main__' :
HOST = '192.168.1.6'
PORT = 8998
ADDR = (HOST,PORT)
server = ThreadingTCPServer(ADDR,Handler) #参数为监听地址和已建立连接的处理类
print ( 'listening' )
server.serve_forever() #监听,建立好TCP连接后,为该连接创建新的socket和线程,并由处理类中的handle方法处理
print (server)
|
以下测试中我使用另外一台主机和本机的两个中断去连接服务器,都可以正常连接并且能进行数据应答交互
注意:此程序示例运行平台为rhel7.2.x86_64,python版本为3.6.2,对于windows平台和非同一python版本的用户可能缺乏一定的兼容性,如果是其他平台用户请自行修正!!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/lockey23/article/details/77915769