关闭

python多线程socket编程--多客户端接入

标签: socketpython多线程
1864人阅读 评论(2) 收藏 举报
分类:

Python中实现socket通信的服务端比较复杂,而客户端非常简单,所以客户端基本上都是用sockct模块实现,而服务
端用有很多模块可以使用,如下:
这里写图片描述

1、客户端

#!/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来完成。

#!/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版本的用户可能缺乏一定的兼容性,如果是其他平台用户请自行修正!!

有任何问题可以留言讨论

1
2
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Python3 socket编程,并与多线程实现最简单的聊天工具之一

socket通讯必须有服务端和客户端 创建服务端: 【第一步】:先创建一个socket类型的对象s: s=socket.socket(familly,type) family参...
  • a753255157
  • a753255157
  • 2015-10-26 01:02
  • 5076

Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信

本文用python进行socket编程,实现客户端和服务器互相发送字符串,并在标准输出打印。 下面是客户端程序: #!/usr/bin/python import socket HOST = 'lo...
  • FreeeLinux
  • FreeeLinux
  • 2016-07-30 09:43
  • 2022

python 可连接多个客户端的服务器 threading版

还是个简单的多连接的服务器。但是发现这样写貌似就不能实现服务器向客户端发送消息了??? 觉得很迷茫QAQ 之前发现每次连接的时候,消息都不能很好地返回到页面上。发现是因为客户端接受的时候是循环接受的,...
  • natsuyu
  • natsuyu
  • 2015-03-18 15:30
  • 1335

网络编程_TCP_Socket通信_聊天室_客户端多线程_群聊JAVA191-192

一、S02E191_01网络编程_TCP_Socket通信_聊天室_客户端多线程二、S02E192_01网络编程_TCP_Socket通信_聊天室_群聊
  • u013292493
  • u013292493
  • 2016-03-13 16:01
  • 1164

[网络编程]——TCP_Socket通信_聊天室_客户端多线程.初步形成

/** * 创建服务器,加入多线程 * 写出数据:输出流 * 读取数据:输入流 * @author Administrator * */ /** * 创建服务器 * 写出数据:输出流 ...
  • MyFuture_MyDream
  • MyFuture_MyDream
  • 2016-04-19 00:44
  • 860

java Socket编程--多线程实现为多个客户端服务

为多个客户端服务 1.服务器端 package Socket; import java.io.IOException; import java.net.ServerSocket; imp...
  • zbwork000
  • zbwork000
  • 2011-10-05 12:49
  • 2984

Socket 多线程,Java C/S 模式 编程(客户端)

// Fig. 18.5: Client.java // Client that reads and displays information sent from a Server. import j...
  • zhuxiangfeicool
  • zhuxiangfeicool
  • 2012-09-16 17:10
  • 1429

Socket编程——使用多线程实现多客户端的通信

多线程服务器 应用多线程来实现服务器与多客户端之间的通信 基本步骤 1、服务器端创建ServerSocket,循环调用accpet()等待客户端连接 2、客户端创建一个socket并请求和服务器端连接...
  • wenwen360360
  • wenwen360360
  • 2017-02-13 20:40
  • 103

Socket 多线程 JDBC综合编程一客户端编程

这里是将GUI,Socket编程,多线程任务,JDBC综合起来,写的一个远程交互小项目。不过这里IP地址是采用127.0.0.1(回环地址)进行测试的,   若访问远程服务器则需要将IP地址进行相应修...
  • Geek_Dream
  • Geek_Dream
  • 2016-10-28 13:04
  • 220

android4.0.3 多线程socket通信(客户端->服务器)

  • 2014-07-24 14:04
  • 2.42MB
  • 下载
    个人资料
    • 访问:79012次
    • 积分:3314
    • 等级:
    • 排名:第11778名
    • 原创:221篇
    • 转载:19篇
    • 译文:16篇
    • 评论:21条
    最新评论