草庐IT

my_socket

全部标签

Python 双向 TCP 套接字卡在 socket.recv 上

引用这个例子(和docs):https://pymotw.com/2/socket/tcp.html我正在尝试通过使用TCP的客户端和服务器之间的阻塞套接字实现双向通信。我可以从client->server或server->client获得单向通信,但在尝试接收时套接字仍然被阻塞或“挂起”服务器和客户端上的消息。我正在使用一个简单的算法(recvall),它使用recv,将数据包合并为完整的消息。我知道在发送或读取所有数据之前,套接字会一直被设计阻塞(对吗?),但这不是sendall和recvall负责的吗?为什么在客户端或服务器上禁用recv会“解锁”它并使其工作?最终我做错了什么导

sockets - 当我请求的数据多于立即可用的数据时, `recv` 会阻塞 TCP 套接字吗?

TCP可以任意合并和拆分数据包。因此,假设我这样做,例如,这样的调用:`recv(sock,buf,15,0)`但此刻只有5数据字节立即可用–威尔recv()阻止直到15字节的数据可用,或者我只会得到5字节?我问是因为我想知道我是否可以阅读,例如uint32_t就是这样(假设i是uint32_t类型的变量):if(recv(sock,&i,sizeof(uint32_t),0)或者我更愿意做这样的事情:unsignedcharbuff[sizeof(uint32_t)];ssize_tread_already=0;while(read_already!=sizeof(uint32_t)

node.js - 在 Socket.io 中使用 HTTP 进行 TCP 通信时出现 TypeError : Cannot read property 'emit' of undefined

尝试与HTTP服务器通信TCP服务器我的TCP端口是4040,HTTP端口是3000我正在努力将TCP服务器上接收到的数据传递给HTTP服务器在TCP端口上接收到的数据显示在控制台窗口上,我试图通过将数据存储在全局变量中来将此数据传递给HTTP,以便我可以在网页上显示它。谢谢:)服务器代码:entercodeherevarhttp=require('http').createServer(httpHandler);varnet=require('net');varapp=require('express')();varhttp=require('http').Server(app);v

sockets - 关于 TCP 连接和 TCP 保持事件的查询?

我有以下关于连接和TCP保持事件的查询:对于TCP连接,TCP保持事件状态是强制性的吗?保持事件的持续时间是固定的还是可配置的?假设保活间隔是每15秒一次,那么保活是始终每15秒发送一次还是仅在15秒内未发送应用程序数据时才发送?服务器(通过TCP与客户端连接)如何确定与客户端的连接是否完好?可以使用TCPkeepalive来完成吗?在这种情况下,是服务器需要发送活着?此外,如果未启用keepalive,那么除了发送应用程序级探测之外,还有什么方法可以检查连接状态吗? 最佳答案 IsTCPkeepalivemandatoryfora

Perl IO::Socket::INET + IO::Async::Stream 断开连接时重新连接到 TCP 服务器

对于我来说,我似乎无法弄清楚如何在断开连接后重新连接标准TCP套接字连接,尤其是在IO::Async::Loop的上下文中一些基础知识:#!/usr/bin/perlusestrict;usewarnings;useSocket;useIO::Async::Loop;useIO::Async::Stream;useIO::Socket;useTime::HiResqw(usleep);#standardeventloopmy$loop=IO::Async::Loop->new;#notificationservicesocketconnection;weonlywriteoutgoin

sockets - Windows 防火墙入站规则与 netstat 监听端口不匹配

我不是防火墙专家,所以需要一些帮助来理解我的Windows防火墙规则和netstat显示的内容之间的区别。由于规定,我公司的某些计算机仅允许几个端口上的入站流量,默认情况下所有其他端口都被阻止。例如,一台计算机可能允许TCP20、21、23、80、443、445和3389。但是,当我执行netstat命令时,我看到许多不应允许的“监听”端口:ProtoLocalForeignStateTCP0.0.0.0:59850.0.0.0:0LISTENINGTCP0.0.0.0:90010.0.0.0:0LISTENINGTCP0.0.0.0:90020.0.0.0:0LISTENINGTCP

c++ - 如何接受 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> 作为 boost::asio::ip::tcp::socket 类型的参数

我试图调整Boost文档中的SSL服务器示例here但我想制作一个应用程序,您可以在其中使用普通boost::asio::ip::tcp::socket或SSL套接字,但我还没有找到将两者传递给voiddo_something_with_socket(boost::asio::ip::tcp::socket&sock)之类的函数的好方法因为SSL套接字不是从原始TCP套接字继承的。我唯一能想到的就是到处使用模板,但我想知道是否有更好的方法来做到这一点?谢谢。编辑:我查看了boost::asio::ssl::stream的成员我找到了next_layer()是boost::asio::i

sockets - TCP 和 UDP 协议(protocol)意义上的记录或数据边界是什么意思?

我正在学习套接字并在SOCK_SEQPACKET通信协议(protocol)中找到数据或记录边界一词?任何人都可以简单地解释什么是数据边界以及SOCK_SEQPACKET与SOCK_STREAM和SOCK_DGRAM有何不同? 最佳答案 这个答案https://stackoverflow.com/a/9563694/1076479对消息边界(“记录边界”的不同名称)有一个很好的简洁解释。将该答案扩展到SOCK_SEQPACKET:SOCK_STREAM在两个对等点之间提供可靠、有序的数据流通信。它不维护消息(记录)边界,这意味着应用

sockets - 另一个客户端应用程序可以关闭崩溃的客户端应用程序通过服务器打开的TCP连接吗?

请考虑以下顺序:客户端应用程序(Web浏览器)打开到不同Web服务器的多个TCP连接;以太网电缆然后断开连接;然后关闭客户端应用程序;以太网电缆保持断开状态几个小时;以太网电缆已重新连接;我看到了长时间关闭的客户端应用程序已连接到的一些服务器的“TCPkeep-alive”数据包(每60秒,持续数小时)!通常,当一个应用程序关闭时,该应用程序将启动每个打开的套接字的关闭,然后TCP层将尝试向每个远程端点发送FIN数据包。如果在物理上可以发送FIN数据包,并且实际发生这种发送,则本地端点将从ESTABLISHED状态变为FINWAIT_1状态(并等待从远程端点接收ACK等)。但是,如果物

c - TCP 连接 : Recreating a socket that has been closed

我正在编写客户端FTP程序,到目前为止,在成功连接后,服务器将以扩展被动模式运行。使用从EPSV命令返回的端口号,我可以像这样创建客户端套接字:voidcreate_data_channel(){if((data_sock=socket(AF_INET,SOCK_STREAM,0))==-1){perror("Cannotcreateclientsocketfordataconnection:(");exit(1);}data_server_addr.sin_family=AF_INET;data_server_addr.sin_port=htons(port);data_server