- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个在将页面发送到浏览器时遇到问题的网络服务器。它正确发送第一个文件(这个文件包括两个 css 文件)。但是,在发送第二个文件后,浏览器停止请求数据。它总是遗漏完成页面所需的 css 文件之一。
这是一些交易:
GET / HTTP/1.1
Host: website.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 OK 200
Server: thserver
Date: Mon Apr 15 17:29:51 2013
Content-Length: 564
Data received: GET /main.css HTTP/1.1
Host: website.com
Connection: keep-alive
Accept: text/css,*/*;q=0.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31
Referer: http://website.com/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
HTTP/1.1 OK 200
Server: thserver
Date: Mon Apr 15 17:29:51 2013
Content-Length: 386
如果有人也知道验证 http 事务的好方法,那也会有所帮助。我确实查看了 chrome 的开发工具并显示它正在等待接收最后一个文件,但我似乎从未在服务器上收到请求。
另外,我用telnet模拟了一个浏览器,效果很好。这是我输入的内容:
GET /
GET /index.css
GET /main.css
它每次都发回文件。
代码继续使用 read(2) 轮询套接字,但在第三个文件的请求应该到达时继续返回 EAGAIN 或 EWOULDBLOCK。
这是套接字 io 的代码:
const int port_number = 80;
const int timeout = 5000000;
const int wait_time = 10000;
PORT_CALL {
/* declarations here */
read_client:
result = read( socket[ 0 ], &header_buffer[ bytes_read ], BUFFER_SIZE - bytes_read );
if( result < 0 ){
if( errno & ( EWOULDBLOCK | EAGAIN ) ){
if( bytes_read > 0 ){
bytes_read = 0;
read_timeout = 0;
goto respond_request;
}
if( read_timeout < timeout ){
read_timeout += wait_time;
usleep( wait_time );
goto read_client;
}
}
goto exit_thread;
} else if( result > -1 ){
bytes_read += result;
goto read_client;
}
respond_request:
/* respond stuff start */
/* respond stuff end */
goto read_client;
exit_thread:
这是涉及创建套接字的代码
temp->socket_descriptor = socket( AF_INET, SOCK_STREAM, 0 );
temp->server_address.sin_family = AF_INET;
temp->server_address.sin_addr.s_addr = INADDR_ANY;
temp->server_address.sin_port = htons( * temp->port_number );
if( bind( temp->socket_descriptor,
( struct sockaddr * ) &temp->server_address,
sizeof( temp->server_address ) ) < 0 ) ..
listen( temp->socket_descriptor, 10 );
wait_for_client:
new_socket = accept( temp->socket_descriptor,
( struct sockaddr * ) &client_address,
&address_length );
我知道我可能要求太多了。如果有人知道一个好的调试工具可以让我解决这个问题,我也将非常感激。如果有人建议使用调试器工具帮助我解决问题,我也会将其视为一个答案。
编辑:写入和读取函数现在在循环中,但问题仍然存在。
最佳答案
如果您刚刚学习如何使用数据包捕获进行调试,也许 wireshark 更容易上手。它提供了一个 GUI,可以轻松定义简单规则并直观地检查捕获。这当然是一个品味问题,所以只是一个建议。
至于代码,很难说出问题可能是什么,因为它离SSCCE 还差得远。 .不过我有一些建议,
if( filename )
之类的内容,则在释放它之后 filename = NULL;
。for( ; header_buffer[ i ]; i++ ) header_buffer[ i ] = 0;
中的测试看起来很危险。你的读取循环是直到它有完整的请求,还是直到它有超过 0 个字节?看起来像后者,那是不对的。
编辑,添加以下文字:示例中的代码仍然不是很完整(write fex 在哪里?),所以很难猜出确切的问题。然而,有几个非常致命的缺陷。
不应像现在这样测试 errno,if( errno & ( EWOULDBLOCK | EAGAIN ) )
。在 Linux 上,您可以测试 if (errno == EWOULDBLOCK),因为 EAGAIN 和 EWOULDBLOCK 是相同的。在它们不同的系统上,使用两个带有 || 的测试它们之间。如果 errno 是 fex ECONNRESET,则当前代码返回非零值(在 Linux 上)。
现在代码在技术上涵盖了读取返回 0,但不是特例。读取返回 0 意味着连接正在关闭,您不应再读取套接字。
关于您的 Web 服务器中可能存在的问题的一个疯狂猜测(与上面的 #2 相关)是客户端在接收到第三个文件之前断开连接,并且服务器在关闭的套接字上保持忙碌循环。
我建议浏览 Beejs guide或者一些关于系统和套接字编程的书。
关于c - 套接字事务未通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16026856/
我正在使用 PostgREST 将数据库实体暴露给使用这些实体的 Springboot 应用。 我的数据库中有两个实体,分别是 Person 和 City。 我想同时保存 Person 实体和 Cit
1、事务的定义 Redis的事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制。 redis事务的主要作用就是串联多个命令防止别的命令插队。 但是,事务并不具有传统
SQLite 事务(Transaction) 事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可
事务是顺序组操作。 它们作为单个单元运行,并且直到组中的所有操作都成功执行时才终止。 组中的单个故障会导致整个事务失败,并导致对数据库没有影响。 事务符合ACID(原子性,一致性,隔离和耐久性)
我希望将 SqlKata 用于一个项目。但是,项目标准的一部分是查询应该能够作为事务执行。有没有一种方法可以使用 MSSQL 事务执行一个查询或多个查询? 非常感谢。 最佳答案 SQLKata 使用
我只是以多线程方式测试 PetaPoco 事务... 我有一个简单的测试用例: -- 简单的值对象称之为 MediaDevice -- 插入一条记录,更新1000次 void TransactionT
我正在尝试从 Excel VBA 向 SQL 中插入一些数据。 SQL 命令是在 VBA 脚本的过程中构建的,包括使用一些 SQL 变量。 我试图了解事务在 VBA 中是如何工作的,以及它们是否可以处
情况如下: 一个大型生产客户端/服务器系统,其中一个中央数据库表具有某个列,该列的默认值是 NULL,但现在默认值是 0。但是在该更改之前创建的所有行当然仍然具有 null 值,这会在该系统中生成许多
数据库事务是一个熟悉的概念。 try { ... .. updateDB() .. ... commit(); } catch error { rollback(); }
我想了解使用传播支持进行 Spring 交易的用途。 java 文档提到如果具有 @Transactional(propagation = Propagation.SUPPORTS) 的方法从支持该事
我需要获取 hibernate 的事务 ID。对于每笔交易,此 ID 必须是唯一的。我尝试使用 session.getTransaction().hashCode(),但我相信这个值不是唯一的。 最佳
我从 firebase 收到以下消息:runTransactionBlock:启用持久性时检测到的使用情况。请注意,事务不会在应用重新启动后保留。 那么应用程序重新启动后到底会发生什么?由于主数据库的
我需要在 jdbc 中执行选择、更新、插入查询的序列。 这是我的代码: public String editRequest(){ connection = DatabaseUtil.getServi
Java 是否提供了一种智能“聚合”事务的方法?如果我有多个异构数据存储库,我想保持同步(即用于数据的 Postgres、用于图表的 Neo4j 以及用于索引的 Lucene),是否有一个范例仅允许
我对标题中的主题有几个问题。首先,假设我们使用 JDBC,并且有 2 个事务 T1 和 T2。在 T1 中,我们在一个特定的行上执行 select 语句。然后我们对该行执行更新。在事务 T2 中,我们
我有一个 Python CGI 处理支付交易。当用户提交表单时,CGI 被调用。提交后,CGI 需要一段时间才能执行信用卡交易。在此期间,用户可能会按下 ESC 或刷新按钮。这样做不会“杀死”CGI,
我有一个代码,类似这样 def many_objects_saving(list_of_objects): for some_object in list_of_objects:
我有一个包含 100,000 条记录的表。我正在考虑使用事务来更新数据。将有一个查询将一列更新为零,并且大约有 5000 个更新,每个更新将更新一条记录。 这些大型事务对内存有何影响?事务运行时选择数
有没有办法在一个命令中执行 SQL 事务?例如 mysql_query(" START TRANSACTION; INSERT INTO table1 ....etc; INSERT INTO tab
真心希望能帮到你! 我使用以下函数在 PHP/MySql 应用程序中发送消息: public function sendMail($sender_id, $recipient_id, $subject
我是一名优秀的程序员,十分优秀!