recv

day28

[亡魂溺海] 提交于 2019-12-01 07:13:18
1. 客户端异常退出 # 当客户端非正常断开连接,服务端是没有断开连接的,这时候通道关闭,接收不到东西,就会报错. # (1)针对window:用try..except..捕获异常,跳出循环 # (2)针对linux:ret= conn.recv(1024)会返回空字符串,直接用len(ret)来判断跳出循环. # ------------------------- 例1 --------------------------------- # ### 服务端 ### import socket server = socket.socket() # 创建服务端对象 server.bind(('192.168.3.21', 8000)) # 绑定ip和端口 server.listen(5) # 后面可以排队客户端数目 while 1: print("server is working") conn, addr = server.accept() # 阻塞:永远等待连接 # 字节类型 while 1: data = conn.recv(1024) # 阻塞:永远等待接收 if data == b'exit': break response = data + b' SB' conn.send(response) conn.close() # 与客户端断开连接(放开那把伞) # ###

仿优酷项目

走远了吗. 提交于 2019-12-01 04:55:38
一、项目总结三步骤 项目生命周期为基准线、分析要有层次感、不要想到什么说什么。 这条基准线上,负责的是哪一块,做了什么。 举例说明项目中遇到的问题及怎么解决的。 二、项目需求分析 1 管理员 2 注册 3 登录 4 上传视频 5 删除视频 6 发布公告 7 用户 8 注册 9 登录 10 冲会员 11 查看视频 12 下载免费视频 13 下载收费视频 14 查看观影记录 15 查看公告 三、搭建框架 1 层级结构:客户端 服务端 数据库 2 3 客户端: 4 基于tcp连接的套接字程序 5 管理员视图 6 注册、登录、上传视频、删除视频、发布公告 7 用户视图 8 注册、登录、购买vip、查看视频、下载免费视频、下载收费视频、查看下载记录、查看公告 9 服务端: 10 tcpserver:基于多线程实现并发的套接字通信 解决粘包问题 11 interface:admin_interface、user_interface、common_interface 12 models类和ORM框架:models类中的四张表继承ORM框架中的基类model 13 数据库: 14 创建四张表:user、movie、notice、download_record 四、ORM框架分析 1 # 优点:让一个不懂数据库操作的小白也能够简单快速操作数据库实现相应功能 2 # 缺点:sql封装固定

c recv() read until newline occurs

倾然丶 夕夏残阳落幕 提交于 2019-12-01 03:39:19
I'm working on writing a IRC bot in C, and have ran into a snag. In my main function, I create my socket and connect, all that happy stuff. Then I have a (almost) infinite loop to read what's being sent back from the server. I then pass what's read off to a helper function, processLine(char *line) - the problem is, that the following code reads until my buffer is full - I want it to only read text until a newline (\n) or carriage return (\r) occurs (thus ending that line) while (buffer[0] && buffer[1]) { for (i=0;i<BUFSIZE;i++) buffer[i]='\0'; if (recv(sock, buffer, BUFSIZE, 0) == SOCKET_ERROR

C++ Socket 一个服务器 多个客户端 (阻塞式)

时光总嘲笑我的痴心妄想 提交于 2019-12-01 03:13:17
服务端 ServerNet.h #pragma once #include <stdio.h> #include <winsock.h> #include<vector> #include<iterator> #include<iostream> #include <algorithm> #include<map> #include<string> using namespace std ; #pragma comment (lib,"ws2_32.lib") SOCKET sockConn; HANDLE bufferMutex; // 令其能互斥成功正常通信的信号量句柄 vector <SOCKET> clientSocketGroup; DWORD WINAPI WaitAcceptThread(LPVOID IpParameter); DWORD WINAPI RecMsgThread(LPVOID IpParameter); DWORD WINAPI SendMsgThread(LPVOID IpParameter); map <SOCKET, string > m_ipSocket; class CServerNet { private : SOCKET m_sock; public : CServerNet( void ); //初始化服务器,返回0表示成功 int

TCP三次握手你真的了解了吗

孤街醉人 提交于 2019-12-01 02:47:18
最近碰到一个问题,Client 端连接服务器总是抛异常。在反复定位分析、并查阅各种资料搞懂后,我发现并没有文章能把这两个队列以及怎么观察他们的指标说清楚。 1 | 0 问题描述 场景 :Java 的 Client 和 Server,使用 Socket 通信。Server 使用 NIO。 问题 : 间歇性出现 Client 向 Server 建立连接三次握手已经完成,但 Server 的 Selector 没有响应到该连接。 出问题的时间点,会同时有很多连接出现这个问题。 Selector 没有销毁重建,一直用的都是一个。 程序刚启动的时候必会出现一些,之后会间歇性出现。 2 | 0 分析问题 正常 TCP 建连接三次握手过程,分为如下三个步骤: Client 发送 Syn 到 Server 发起握手。 Server 收到 Syn 后回复 Syn + Ack 给 Client。 Client 收到 Syn + Ack后,回复 Server 一个 Ack 表示收到了 Server 的 Syn + Ack(此时 Client 的 56911 端口的连接已经是 Established)。 从问题的描述来看,有点像 TCP 建连接的时候全连接队列(Accept 队列,后面具体讲)满了。 尤其是症状 2、4 为了证明是这个原因,马上通过 netstat -s | egrep "listen"

c recv() read until newline occurs

流过昼夜 提交于 2019-12-01 00:12:41
问题 I'm working on writing a IRC bot in C, and have ran into a snag. In my main function, I create my socket and connect, all that happy stuff. Then I have a (almost) infinite loop to read what's being sent back from the server. I then pass what's read off to a helper function, processLine(char *line) - the problem is, that the following code reads until my buffer is full - I want it to only read text until a newline (\n) or carriage return (\r) occurs (thus ending that line) while (buffer[0] &&

read、write 与recv、send区别 gethostname

社会主义新天地 提交于 2019-11-30 23:51:08
recv相对于read有什么区别呢? 其实它跟read函数功能一样,都可以从套接口缓冲区sockfd中取数据到buf,但是recv仅仅只能够用于套接口IO,并不能用于文件IO以及其它的IO,而read函数可以用于任何的IO; recv函数相比read函数多了一个flags参数,通过这个参数可以指定接收的行为,比较有用的两个选项是: 这个这次要学习的,它可以接收缓冲区中的数据,但是并不从缓冲区中清除,这是跟read函数有区别的地方,read函数一旦读取了,就会直接从缓冲区中清除。 readline实现 也就是实现按行读取,读取直到\n字符,实际上,它也能解决上节中提到的粘包问题,回顾下上节的粘包问题解决方案: 包尾加\r\n(ftp) 我们只要解释\n为止,表示前面是一个条合法的消息,对于readline的实现,可以有三种方案: ①、最简单的方案就是一个字符一个字符的读取,然后做判断是否有"\n",但是这种效率比较低,因为会多次掉用read或recv系统函数。 ②、用一个static变量保存接收到的数据进行缓存,在下次时从这个缓存变量中读取然后估"\n"判断。但是一旦用到了static变量,这意味着用到的函数是 不可重录函数【关于这个概念,可以参考博文:http://www.cnblogs.com/webor2006/p/3744002.html】 。 ③、偷窥的方法

【1009 | Day 40】仿优酷

喜夏-厌秋 提交于 2019-11-30 23:28:33
目录 仿优酷项目 1. read.me 2. 项目框架 3. orm框架 4. 数据库 5. 各个功能模块 6. 项目中遇到的问题及怎么解决的 仿优酷项目 1. read.me 管理员 1 注册 2 登录 3 上传视频 4 删除视频 5 发布公告 用户 1 注册 2 登录 3 冲会员 4 查看视频 5 下载免费视频 6 下载收费视频 7 查看观影记录 8 查看公告 2. 项目框架 层级结构: 客户端 服务端 数据库 客户端: -tcp_client: 基于tcp连接的套接字程序 -admin: 管理员视图 注册 登录 上传视频 删除视频 发布公告 -user: 用户视图 注册 登录 购买vip 查看视频 下载免费视频 下载收费视频 查看下载记录 查看公告 服务端: tcpserver:基于多线程实现并发的套接字通信 解决粘包问题 interface:admin_interface、user_interface、common_interface models类和ORM框架:models类中的四张表继承ORM框架中的基类model 数据库: 创建四张表:user、movie、notice、download_record 3. orm框架 优点: 能够简单快速操作数据库实现相应功能 缺点: sql封装固定,不利于sql查询优化 对象关系映射 类 >>> 数据库的表 对象 >>>

RabbitMQ3-RabbitMQ消息类型

南笙酒味 提交于 2019-11-30 22:19:44
1.1 概述 http://www.rabbitmq.com/getstarted.html 1.2 simplest(简单队列) 1.2.1.概述 The simplest thing that does something - 简单队列 生产消费一一对应,耦合性高. - 生产消息快,消费消息慢.如果很多容易堵塞 P:消息生产者;红色的:队列;C:消费者. 1.2.2 示例 pom.xml < dependencies > < dependency > < groupId > com.rabbitmq </ groupId > < artifactId > amqp-client </ artifactId > < version > 4.0.2 </ version > </ dependency > < dependency > < groupId > org.slf4j </ groupId > < artifactId > slf4j-api </ artifactId > < version > 1.7.10 </ version > </ dependency > < dependency > < groupId > org.slf4j </ groupId > < artifactId > slf4j-log4j12 </ artifactId > <

rabbitmq 工作队列(java 实现)

柔情痞子 提交于 2019-11-30 22:01:12
rabbitmq HelloWorld 做了一个简单的发送和接收消息(http://blog.csdn.net/convict_eva/article/details/52291774)。 工作队列(又称:任务队列——Task Queues)是为了避免等待一些占用大量资源、时间的操作。当我们把任务(Task)当作消息发送到队列中,一个运行在后台的工作者(worker)进程就会取出任务然后处理。当你运行多个工作者(workers),任务就会在它们之间共享。 这个概念在网络应用中是非常有用的,它可以在短暂的HTTP请求中处理一些复杂的任务。 准备: 使用Thread.sleep()模拟耗时操作,发送消息中有一个 . 接收消息就sleep() 1秒。 工程搭建: RabbitmqConfigure 配置: public class RabbitmqConfigure { //队列名称 public final static String QUEUE_NAME = "task_queue"; //是否是持久化的queue public final static boolean DURABLE=true; //受当前连接限制的queue,true:当与消费者(consumer)断开连接的时候,这个队列应当被立即删除。 public final static boolean EXCLUSIVE