socket

python socketserver

三世轮回 提交于 2020-02-04 22:02:11
# socket 底层模块# socketserver 基于socket完成的# tcp协议的server端处理并发的客户端请求# 网盘 : 文件的上传和下载server 端 import timeimport socketserverclass Myserver(socketserver.BaseRequestHandler): def handle(self): conn = self.request while True: try: content = conn.recv(1024).decode('utf-8') conn.send(content.upper().encode('utf-8')) time.sleep(0.5) except ConnectionResetError: breakserver = socketserver.ThreadingTCPServer(('127.0.0.1',9001),Myserver)server.serve_forever()client端 import socketsk = socket.socket()sk.connect(('127.0.0.1',9001))while True: sk.send(b'hello') content = sk.recv(1024).decode('utf-8') print

linux高级编程day10 笔记

妖精的绣舞 提交于 2020-02-04 20:10:32
一.TCP的编程模型 回顾: UDP模型的UML图 TCP模型的UML图 案例1: TCP的服务器(在案例中使用浏览器作为客户程序) socket建立服务器的文件描述符号缓冲 bind把IP地址与端口设置到文件描述符号中 listen负责根据客户连接的不同IP与端口,负责生成对应的文件描述符号及其信息 accept一旦listen有新的描述符号产生就返回,否则阻塞。 View Code //tcpserver.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> main() { int serverfd; int cfd; int a; struct sockaddr_in sadr; struct sockaddr_in cadr; socklen_t len; int r; char buf[1024]; //1.socket serverfd=socket(AF_INET,SOCK_STREAM,0); if(serverfd==-1) printf("1:%m\n"),exit(-1); printf(

基于TCP协议的socket通信

匆匆过客 提交于 2020-02-04 18:11:06
基于TCP协议Socket服务端和客户端的通信模型: Socket通信步骤:   1.建立服务端ServerSocket和客户端Socket   2.打开连接到Socket的输出输入流   3.按照协议进行读写操作   4.关闭相对应的资源 多线程服务器 多线程用来实现 服务器与多客户端之间的通信 基本步骤   1 服务器创建serverSocket,循环调用accept()等待客户端连接   2 客户端创建一个scoket并请求和服务器端连接   3 服务器端接收客户端请求,创建socket与该客户建立专线连接   4 建立连接的连个socket在一个单独的线程上对话   5 服务器继续等待新的连接 客户端 1 package com.socket; 2 3 import java.io.BufferedReader; 4 import java.io.InputStream; 5 import java.io.InputStreamReader; 6 import java.io.OutputStream; 7 import java.io.PrintWriter; 8 import java.net.Socket; 9 10 public class Client { 11 12 /** 13 * 基于TCP协议的socket通信 14 * 客户端 15 * @return

基于TCP协议Socket通信

不想你离开。 提交于 2020-02-04 17:52:34
服务器线程处理类 package demo4; import java.io.*; import java.net.Socket; /** * 服务器线程处理类 * @ClassName ServerThread * @Author DiYun * @Version 1.0 **/ public class ServerThread extends Thread { //和 本线程相关的Socket Socket socket = null; public ServerThread(Socket socket) { this.socket = socket; } //线程执行的操作,响应客户端的请求 public void run() { InputStream inputStream =null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; OutputStream outputStream = null; PrintWriter printWriter = null; try { //3.获取输入流 并读取客户端信息 inputStream = socket.getInputStream();//获取字节流 inputStreamReader = new

大白话五种IO模型

微笑、不失礼 提交于 2020-02-04 12:57:12
目录 大白话五种IO模型 一、I/O模型介绍 二、阻塞I/O模型 2.1 一个简单的解决方案 2.2 该方案的问题 2.3 改进方案 2.4 改进后方案的问题 三、非阻塞I/O模型 3.1 非阻塞I/O实例 四、多路复用I/O模型 4.1 select/poll模型 4.1.1 select网络I/O模型 4.1.2 select监听fd变化的过程分析 4.1.3 该模型的优点 4.1.4 该模型的缺点 4.2 epoll模型(了解) 五、信号驱动I/O模型(了解) 六、异步I/O模型 七、I/O模型比较分析 大白话五种IO模型 一、I/O模型介绍 为了更好地了解I/O模型,我们需要事先回顾下: 同步、异步、阻塞、非阻塞 同步(synchronous) I/O和异步(asynchronous) I/O,阻塞(blocking) I/O和非阻塞(non-blocking)I/O分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous I/O和non-blocking I/O是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network I/O。本文最重要的参考文献是Richard

《深入浅出Node.js》第7章 网络编程

丶灬走出姿态 提交于 2020-02-04 07:57:42
@by Ruth92 (转载请注明出处) 第7章 网络编程 Node 只需要几行代码即可构建服务器,无需额外的容器。 Node 提供了以下4个模块(适用于服务器端和客户端): net -> TCP dgram -> UDP http -> HTTP https -> HTTPS OSI 模型:由七层组成,分别为物理层、数据链路层、网络层、传输层、表示层、应用层。 一、构建 TCP 服务 TCP TCP(传输控制协议),属于传输层协议,是面向连接的协议。 许多应用层协议基于 TCP 构建,典型的是 HTTP、SMTP、IMAP 等协议。 【显著特征】:在传输之前需要3次握手形成会话。 只有会话形成之后,服务器端和客户端之间才能互相发送数据 在创建会话的过程中,服务器端和客户端分别提供一个套接字,这两个套接字共同形成一个连接。 服务器端与客户端则通过套接字实现两者之间连接的操作。 创建 TCP 服务器端 TCP-Server.js var net = require('net'); var server = net.createServer(function(socket) { // 新的连接 socket.on('data', function(data) { socket.write('你好'); }); socket.on('end', function() { console

Winsock Server Code

◇◆丶佛笑我妖孽 提交于 2020-02-04 05:44:39
以下代码来自: https://msdn.microsoft.com/en-us/library/windows/desktop/ms737593(v=vs.85).aspx #undef UNICODE #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winsock2.h> #include <ws2tcpip.h> #include <stdlib.h> #include <stdio.h> // Need to link with Ws2_32.lib #pragma comment (lib, "Ws2_32.lib") // #pragma comment (lib, "Mswsock.lib") #define DEFAULT_BUFLEN 512 #define DEFAULT_PORT "27015" int __cdecl main(void) { WSADATA wsaData; int iResult; SOCKET ListenSocket = INVALID_SOCKET; SOCKET ClientSocket = INVALID_SOCKET; struct addrinfo *result = NULL; struct addrinfo hints; int iSendResult

day43(协成)

我是研究僧i 提交于 2020-02-04 02:51:18
协程(纤程):一个线程的多个部分。   比线程的单位更小。     在一个线程中可以开启很多协程。   在执行当前操作时,遇到I/O操作就会冻结当前操作,去执行其他任务,不断的检测上一个任务是否 -,如果I/O结束了就继续从冻结的地方开始 I/O操作是不占CPU的 协程的特点:   1.冻结当前程序任务的特点   2.可以规避I/O操作的时间 我们今天顺便讲了生成器,(用时间换了空间,每制造出一个资源就消费一个资源) 好的,!下面正式进入正题???? greenlet 切换(在携程这个模块中做多个协程之间的切换的) from gevent import monkey;monkey.patch_all() # 它会把下面导入的所有的模块中的IO操作都打成一个包,gevent就能够认识这些IO了 import time import gevent # 使用gevent模块来执行多个函数,表示在这些函数遇到IO操作的时候可以在同一个线程中进行切花 # 利用其他任务的IO阻塞时间来切换到其他的任务继续执行 # spawn来发布协程任务 # join负责开启并等待任务执行结束 # gevent本身不认识其他模块中的IO操作,但是如果我们在导入其他模块之前执行from gevent import monkey;monkey.patch_all() #

Java NIO的多路复用及reactor

微笑、不失礼 提交于 2020-02-04 00:12:02
(from:http://developer.51cto.com/art/201112/306489.htm) 以下描述,为了说明问题,就提提历史(类似的东西,网上一搜一大把,但是希望你能在这里止步,知道到底是怎么回事。如果还是不清楚,咱就站内沟通!)。 在我(刚)看nio的这段时间里,主要接触了几个东西,就是关于server和client。java之前的io完全可以胜任,但是效率不高,为何效率不高呢? ===============history==start=============== //TODO:finish the old style of server and socket data transion. ServerSocket socket = new ServerSocket(80); while (true) { final Socket connection = socket.accept(); handleRequest(connection); } ===============history==end in the future================ 在上面的代码片段中,我们只能是一个request一个的进行处理。这使得所有的请求都阻塞了。如果我们再改变一下,将handleRequest方法封装到线程中处理: if(connection =

初步探索高性能网络应用框架Netty

喜夏-厌秋 提交于 2020-02-03 22:56:30
Netty 是一个高性能的网络框架,应用非常普遍,目前在Java 领域,Netty 基本上成为网络程序的标配了,Netty 框架功能丰富,也非常复杂。今天主要分析Netty 框架中的线程模型,而线程模型直接影响着网络程序的性能。 在介绍Netty 的线程模型之前,我们首先搞清楚网络编程性能的瓶颈在哪里,然后再看Netty 的线程模型是如何解决这个问题的。 网络编程性能的瓶颈 传统的BIO 编程模型里, 所有的read() 操作和 write() 操作都会阻塞当前线程的, 如果客户端和服务端已经建立了一个连接,而迟迟不发送数据,那么服务端的 read() 操作会一直阻塞, 所以使用BIO 模型, 一般都会为每个socket 分配一个独立的线程,这样就不会因为线程阻塞在一个socket 上而影响对其他socket 的读写。 BIO 的线程模型如下图所示:每个socket 对应一个独立的线程。为了避免频繁创建消耗线程,可以采用线程池,但是socket 和线程之间的对应关系不会变化。 BIO 这种线程模型,适用于socket 连接不是很多的场景。但是现在的互联网场景,往往需要服务器能够支撑十万甚至百万连接,而创建十万甚至百万连接显然不现实,所以BIO 线程模型无法解决百万连接的问题。如果仔细观察,你会发现互联网场景中,虽然连接很多,但是每个连接的请求并不频繁,所以线程大部分时间都在等待I