草庐IT

m_socket

全部标签

python - TCP Socket Server客户端连接fd会不会导致内存泄露?

如果我需要关闭客户端套接字句柄(conn),例如“conn.close()”,我不需要吗?如果我运行多线程来处理客户端套接字fd(conn)。服务器运行时间过长会不会导致内存泄露?如果clientno调用conn.close(),server会不会关闭clientsocketfd?以下是我的tcp-socket服务器代码:#coding:utf-8importsocketimportos,os.pathimporttimesockfile="./communicate.sock"ifos.path.exists(sockfile):os.remove(sockfile)print"Op

Python socket编程——异常处理

我正在用python开发一个基本的套接字客户端程序,但我不太确定如何处理异常。这是我到目前为止所做的:TCP_IP='..............'TCP_PORT=4950MESSAGE="o3"BUFFER_SIZE=2048data=""s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(5.0)try:s.connect((TCP_IP,TCP_PORT))exceptsocket.error:#writeerrorcodetofiles.close()try:s.sendall(MESSAGE)exce

sockets - TCP 打开套接字延迟

打开与远程服务器的TCP套接字消耗的时间是多少?例如,在C中,从调用connect()函数到返回0需要多长时间?影响这个时间的因素有哪些? 最佳答案 影响这一点的主要因素是initialTCPhandshake所需的时间这主要取决于对等方的距离(就网络而言,即跳数和持续时间)。只要客户端和服务器都没有资源匮乏(即DOS攻击),系统性能等其他因素大多无关紧要。 关于sockets-TCP打开套接字延迟,我们在StackOverflow上找到一个类似的问题: ht

java - tcp socket 的 read 方法如何工作?

目前我遇到一种情况,我想将输入流读取到只包含一个字节的字节数组。我重复执行此操作一定次数,以确保获得相应的字节长度。例如,40个字节读取40次。但是在这个套接字的另一端,它在每个写入方法中写入512字节。(实际上在大多数情况下读取缓冲区是512字节,只是在特定条件下我一次读取一个字节)。我想知道在这种情况下发送套接字是否仍然每次都通过网络写入512个字节并且接收套接字接收所有这些并将它们存储在本地字节数组中并且读取方法每次从本地数组读取一个字节或者发送套接字每次也只写入1个字节?这个问题听起来有点困惑,希望我说清楚了。非常感谢任何帮助! 最佳答案

c++ - socket发送信息的时机(TCP、C++)

我正在开发一个在客户端和服务器之间使用TCP通信的C++程序。在程序的某个时刻,有一个循环,其中服务器向客户端发送一个大小为x的序列化对象object1,然后是一个大小为y的序列化对象object2。客户端有一个循环,其中包含两个连续的recv()调用来接收这些对象。问题是有时客户端中的第一个recv()接收大小为(x+y)的对象,即服务器在客户端甚至开始等待对象1之前发送这两个对象。如何预防? 最佳答案 所描述的问题是TCP流特性的影响。这意味着TCP协议(protocol)不关心消息边界。所以你需要添加它们。一种可能的解决方案是

java - Socket TCP 通信数据包拆分

我开发了一个点对点项目,我尝试在两台机器上进行通信(A我的笔记本电脑通过WiFi连接,B我的NAS通过以太网连接)同一个网络。通信运行良好,但是当我发送大小为1696字节的数据包时出现问题。所以在我的发件人A中,我将1696字节的block写入B,当我查看Wireshark时,我看到发送了两个数据包,一个大小为1448字节,另一个大小为248字节(1448+248=1696)。所以我认为数据包被一种协议(protocol)或网络和物理层之间的某种东西切断,因为1448可以对应于一个MTU。所以在我的接收器B中发生了一些奇怪的事情,如果我发送两次1696block,第一次我将读取一个16

sockets - 保留 TCP 连接的开销

我是套接字编程的新手。我想知道创建TCP连接并让它空闲的互联网和硬件开销是多少?例如,有1000个客户端,每个客户端都创建一个到单个服务器的tcp连接,在建立tcp连接后,此时互联网或硬件开销是多少? 最佳答案 有一个3-wayTCPhandshake建立TCP连接。建立连接后,唯一流经连接的数据是应用程序发送的数据,如果启用,TCPkeep-alives(有效载荷为0的TCP段)。 关于sockets-保留TCP连接的开销,我们在StackOverflow上找到一个类似的问题:

sockets - bind() - 如何在同一个套接字上多次调用 bind()

我在已将端口值设置为0的地址上使用bind()。我知道通过这种方式,它将一个随机端口绑定(bind)到该地址。但我只希望端口值x使得(x>=0&&x=49152)被选择了,但我注意到,在可以选择的随机端口中,也有port>49152。但是,如果我重新调用bind(),它会给出错误:参数无效。如何在不给出无效参数错误的情况下重新调用bind()函数,或者如何以另一种方式解决此问题?非常感谢。 最佳答案 您不能在已经绑定(bind)的套接字上再次调用bind()。套接字一旦绑定(bind),就无法更改其绑定(bind)。绑定(bind)

sockets - SSL_accept() 失败,返回值 -1

为了理解SSL/TLS,我在Windows-7上下载了OpenSSL-1.0.2k并用Cygwin编译gcc64位编译器。我从OpenSSLserver/clientexampleinc中获取了服务器/客户端的现成示例并用cygwingcc编译。第一次编译就成功了。我使用以下命令从cmd执行服务器和客户端。(Server)D:\>ssl-server.exe5000(Client)D:\>ssl-client.exe127.0.0.15000客户端没有任何响应退出,但另一方面,服务器显示它已建立连接,例如;Connection:127.0.0.1:50475并无限期地等待下一行。然后我

python - 如何在Python中的recv之前找出socket中有多少字节?

我有一个TCP处理数据流。它一次需要4096个字节,但我需要一种方法在接收之前找出整个套接字的大小。这样我就可以确定在切换套接字之前套接字将被读取多少次。它还将通知这是该套接字的最后一次接收,以便我可以在选择切换到另一个可用套接字之前对其进行一些操作。defhandle_tcp(self,sock,remote):fdset=[sock,remote]whileTrue:r,w,e=select.select(fdset,[],[])#Howtofindouthowmuchbytesneedtobereadfromsocket?ifsockinr:non_blocking_calcul