Server socket
用法都一样
区别: self.request
TCP self.requsst 代表具体的链接
UDP self.requst 代表一个小元组(元组里面: 第一个元素 客户端发来的数据 ,第二个元素 回复客户端的套接字对象)
基于UDP:
import socketserver
from threading import current_thread
# fork linux下一个多进程接口 windows没有这接口
# 用于处理请求的类 class MyHandler(socketserver.BaseRequestHandler):
def handle(self):
print(self)
print(self.server) # 获取封装的服务器对象
print(self.client_address)# 客户端地址
print(self.request)# 是一个元祖 包含收到的数据 和服务器端的socket
# data,client = self.request data = self.request[0]
print(data.decode("utf-8"))
self.request[1].sendto(b"i am server",self.client_address) server = socketserver.ThreadingUDPServer(("127.0.0.1",9999),MyHandler)
server.serve_forever() # ThreadingUDPServer 在初始化的时候创建了socket对象
# serve_forever() 将sockt注册到select(多路复用的)
# select中返回一个ready 如果为True则可以处理 _handle_request_noblock 内部创建了一个MyHandler的示例 调用了handler函数 # 使用了socket OOP 多线程 # 正常开发中 如果并发量不大 就是用socketserver
# 否则用协程 """
使用时的区别:
ThreadingTCPServer
handler 在连接成功时执行
self.request 是客户端的socket对象 ThreadingUDPServer
handler 接收到数据时执行
self.request 数据和服务器端的socket对象 """
server
#基于TCP 客户端
import socket
c = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr = (('127.0.0.1',2020))
# c.connect(addr)
while True:
msg = input('>>>: ')
c.sendto(msg.encode('utf-8'),addr) print(c.recvfrom(1024)[0].decode('utf-8'))
client
基于TCP:
import socketserver
from threading import current_thread
# fork linux下一个多进程接口 windows没有这接口 # 用于处理请求的类
class MyHandler(socketserver.BaseRequestHandler):
def handle(self):
print(self)
print(self.server) # 获取封装的服务器对象
print(self.client_address)# 客户端地址
print(self.request)# 获取客户端的socket对象
print(current_thread())
while True:
data = self.request.recv(1024)
print(data.decode("utf-8"))
self.request.send(data.upper()) server = socketserver.ThreadingTCPServer(("127.0.0.1",9999),MyHandler)
server.serve_forever()
server
#基于TCP 客户端
import socket
c = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
addr = (('127.0.0.1',2020))
c.connect(addr)
while True:
msg = input('>>>: ')
c.send(msg.encode('utf-8')) print(c.recv(1024).decode('utf-8'))
client
Server socket的更多相关文章
- SSH登录之后运行命令报错的解决办法-- Failed to connect to Mir: Failed to connect to server socket: No such file or directory
问题描述: Failed to connect to Mir: Failed to connect to server socket: No such file or directory 解决方案: ...
- Windows10 VS2017 C++ Server Socket简单服务器端与客户端
服务端: #include "pch.h" #include<iostream> #include<WinSock2.h> #include <Ws2 ...
- 解决svnserve: Can't bind server socket: Address already in use
最近在忙着搭建jenkins系统集成版本控制和git分布式版本控制,其中涉及到了点svn方面的,由于自己也是第一次搭建svn,挺顺利的,中间遇到点小问题: 我使用的是yum安装的svn,安装完成配置结 ...
- svnserve: Can’t bind server socket: Address already in use报错解决办法
最近在学习自己搭建SVN服务,意外的报错 svnserve: Can’t bind server socket: Address already in use 于是google了下,原来是 已经启动了 ...
- 安卓获取软硬件信息并上传给server(Socket实现)
首先,项目结构如图--A:分为client部分CheckInfo和server端CheckInfo_Server.CheckInfo获取手机信息(Mac,Cpu,内存,已安装软件信息等)并上传到ser ...
- apache activemq Failed to bind to server socket 61616
windows环境上: 首先 nestat -ano | findstr "61616" 查看是否有进程,有的话kill掉, 若没有发现,查看windows Internet Co ...
- (错误)启动ActiveMQ报错:Transport Connector could not be registered in JMX: java.io.IOException: Failed to bind to server socket: stomp://0.0.0.0:61613?
一.错误报告 很明显,端口被占用 二.解决方法 1. 在cmd中输入 netstat -ano 查看61613端口被占用情况,如果有其他进程使用,则使用 taskkill /f /pid 进程PID ...
- Python之路-python(面向对象进阶(模块的动态导入、断言、Socket Server))
模块的动态导入 断言 Socket Server 一.模块的动态导入 class C(object): def __init__(self): self.name = "zhangsan&q ...
- [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select
以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...
随机推荐
- RuntimeError: Python is not installed as a framework.
RuntimeError: Python is not installed as a framework. 文章转载:https://www.cnblogs.com/harelion/p/563776 ...
- 《程序猿闭门造车》之NBPM工作流引擎 - 项目整体架构
前言: 又是一年一度的圣诞节,可这关我什么事呢 :( ,好不容易周末了,还是说说NBPM吧,前不久我发布了一篇关于工作流的文章:<程序猿闭门造车>之NBPM工作流引擎 - 开篇,很多爱好工 ...
- Python_匿名函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数. 代码如下: 1 正常函数: 2 3 def calc(n): 4 5 return n ** n 6 7 print(calc(10)) 8 ...
- C++实现算法常用的STL---整理
algorithm min(a,b)和max(a,b) #include<iostream> #include<algorithm> using namespace std; ...
- Linux 安装软件之后设置PATH环境变量
每一个软件都有安装路径这一项,指定安装路径的目的,一方面是便于文件搜索与查找,另一方面更方便的使用软件. 比如,几乎大多数自己安装的软件,都会选择安装在/usr/local目录下,比如apache.m ...
- CMMI摘要
CMMI_百度百科https://baike.baidu.com/item/CMMI CMMI分为哪几个等级?CMMI等级介绍_百度经验https://jingyan.baidu.com/articl ...
- JDK8 的FullGC 之 metaspace
JDK8 的FullGC 之 metaspace - 简书https://www.jianshu.com/p/1a0b4bf8d498
- 上古神器之Vim编辑器
在Linux操作环境下进行文本的编辑少不了编辑器vi ,vim,nona... 一. 修改颜色方案 有时候,使用vim打开一个文件,竟然是蓝色的,辨识度相当的差,这个时候,我们可以调整 一下颜色的搭配 ...
- [转帖]全国产 台式机/笔记本/服务器都有 方正龙芯3A3000整机三连发
台式机/笔记本/服务器都有 方正龙芯3A3000整机三连发 2019年03月29日 17:17 4171 次阅读 稿源:快科技 7 条评论 https://www.cnbeta.com/article ...
- git遇到的问题 .Git: There is no tracking information for the current branch.
1.Git: There is no tracking information for the current branch. 在执行git pull的时候,提示当前branch没有跟踪信息: git ...