首页 > 其他分享 >多线程socketserver

多线程socketserver

时间:2023-03-28 23:25:29浏览次数:46  
标签:socket socketserver self request client msg 多线程

模块:socketserver

tcp协议:

服务端:

import socketserver
class MyRequestHandle(socketserver.BaseRequestHandler):
   def handle(self):
      # print(self.request)  #如果tcp协议,self.request = conn
      print(self.client_address)
      while True:
         try:
            msg = self.request.recv(1024)
            if msg == 0:break
            print(msg.decode('utf8'))
            self.request.send(msg.upper())
         except Exception:
            break
      self.request.close()

#服务端应该做的两件事
#第一件事:循环的从半连接池中取出链接请求与其建立双向链接,拿到链接对象
s = socketserver.ThreadingTCPServer(('127.0.0.1',8081),MyRequestHandle)

s.serve_forever()
#等同于:
# while True:
#  conn,client_addr = server.accept()  每建立一个链接都会启动一个线程
#启动一个线程(conn,client_addr)

#第二件事:拿到链接对象,与其进行通信循环===》handle

客户端:


import socket

client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #流式协议--> tcp协议
client.connect(('127.0.0.1',8081))  #进行3次握手

while True:
   msg = input('输入要发送的消息:').strip()
   if len(msg) == 0:continue  #解决输入空格的bug
   client.send(msg.encode('utf8')) #编码以二进制的形式发送

   res = client.recv(1024)
   print(res.decode('utf8'))


client.close()

udp协议:

服务端:

import socketserver
class MyRequestHanlde(socketserver.BaseRequestHandler):
   def handle(self):
      client_data = self.request[0]
      print('客户端发来的数据%s'%client_data) #元组中第一个内容
      server = self.request[1]  #套接字对象
      client_address = self.client_address  #ip+接口
      server.sendto(client_data.upper(),client_address)  #转成大写形式返回

s = socketserver.ThreadingUDPServer(('127.0.0.1',8090),MyRequestHanlde)
s.serve_forever()
#相当于只负责循环的收

用户端:

from socket import *

slient = socket(AF_INET,SOCK_DGRAM)

while True:
   msg = input('>>>>:').strip()
   slient.sendto(msg.encode('utf8'),('127.0.0.1',8090))
   res = slient.recvfrom(1024)
   print(res)

slient.close()

 

标签:socket,socketserver,self,request,client,msg,多线程
From: https://www.cnblogs.com/whxx/p/17267155.html

相关文章

  • 【面试专栏】Java创建多线程的五种方式
    1.继承Thread类importlombok.extern.slf4j.Slf4j;importorg.junit.jupiter.api.Test;/***继承Thread类创建多线程单元测试**@authorCL*/@Slf4jpublic......
  • C#:多线程操作Dictionary
    为了在多线程环境下操作Dictionary,我们需要确保线程安全。其中一种实现方式是使用ConcurrentDictionary类,该类位于System.Collections.Concurrent命名空间中。Concurrent......
  • 多线程 wait() notify的用法
    main类 packageendual;publicclassMainApp{ publicstaticvoidmain(String[]args){ Queryq=newQuery(0); Threadthread=newThread(newThrea......
  • 多线程——生产者和消费者(等待唤醒机制)
    生产者和消费者(等待唤醒机制)生产者消费者模式是一个十分经典的多线程协作的模式举例:   实现方式一: 线程的方法代码编写技巧,如run():步骤:(1)循环;(2)同步代码块;(3)判断......
  • android实现多线程基础
    //创建线程类classMythreadextendsThread{@Overridepublicvoidrun(){//定义行为}}//实例化线程类MyThreadmt=newMyThread(“线程名称”);///......
  • 多线程中常见的成员方法
     MyThreadt=newMyThread();1、StringgetName()细节:如果没有给线程设置名字,线程也是有默认的名字的格式:Thread-X(X序号,从0开始)2、voidsetName(Stringname)细......
  • 多线程
    1、概念线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。进程:进程是程序的基本执行实体。多线程:有了多线程,就可以让程序同......
  • 多线程的同步和互斥—线程的信号量
    同步://account.h#ifndef_ACCOUNT_H#define_ACCOUNT_H#include<pthread.h>#include<semaphore.h>typedefstruct{intcode;doublebalance;......
  • Python多任务-多线程-多进程-协程-进阶学习
    --多任务-多线程-多进程-协程-进阶学习--文中所提到的案例参考:GITHUB中项目文件夹https://github.com/FangbaiZhang/Python_advanced_learning/tree/master/02_Python_ad......
  • Task 类 多线程
    Task类定义命名空间: System.Threading.Tasks程序集:System.Runtime.dll表示一个异步操作publicclassTask:IAsyncResult,IDisposable继承  Object->Task......