草庐IT

my_socket

全部标签

sockets - erlang 发送套接字西里尔字符数据

我正在尝试从用Erlang编写的服务器发送数据:gen_tcp:send(Socket,"Serverconnectionrefused\r\n").没关系。但是当我尝试发送带有非拉丁符号的数据时,e。G。西里尔字母,我看到了错误报告。例如,如果我使用:gen_tcp:send(Socket,"Привет\r\n").我看到的不是字符串,而是错误报告。我如何通过Erlang的TCP套接字发送包含非拉丁字符的字符串? 最佳答案 试试这个:8>unicode:characters_to_binary("пириуэтда").>9>

sockets - 是否可以劫持远程主机上的 TCP 连接?

例如,假设PersonA连接到Server并且已经启动了TCP连接。所有数据包均未加密。假设PersonA的IP地址为99.99.99.1另一个用户PersonB是否有可能连接到同一个Server并发送一个数据包,以便Server认为它来了来自A?我知道TCP欺骗PersonB可以使用TCP欺骗来实现这一点吗?'欺骗'目的IP并猜测目的端口(目的端口常用的端口只有5000左右,60000到2^16-1)如果B拥有A的IP地址,他们是否只需猜测远程端口即可实现此目的?还是TCP数据包中有其他字段阻止了这一点?例如,发送5000个数据包,每个数据包都带有欺骗性IP和从60000到2^16-

sockets - 做socket编程时accept函数一定要加锁吗?

所有worker都继承了父服务器的套接字描述符,并用它来接受客户端请求。子进程作为自治进程“并行”运行,并使用带有服务器套接字描述符的接受函数。接受客户端请求时,我是否必须为接受功能使用锁定和解锁机制,或者操作系统为我做这件事?这里的想法是多个进程使用公共(public)服务器套接字描述符来接受客户端请求。我是否必须使用互斥机制来屏蔽它以避免竞争条件或死锁?请注意我在accept函数中使用了非阻塞I/O。我有以下代码:for(;;){intclient=accept(...);if(client我应该使用类似的东西吗:for(;;){lock();intclient=accept(..

c++ - 在我的代码中出现这个 "10038 wsa socket"错误

我目前正在尝试实现一个类来创建和使用TCP连接。(我是c++的新手,所以我可能忘记了一些明显的东西,尽管我一直在认真检查我的代码)请注意,稍后我将实现第二个类来处理新连接,因此代码的某些部分不完整/安排不当,我希望这不会打扰您理解它。这是我的问题:服务器和客户端似乎都工作正常(我一直在检查我的监听、绑定(bind)、连接功能:没有错误)而且我显然能够与客户端发送数据,但是当我尝试读取它时从服务器,我收到WSA错误10038(这意味着我正在无效套接字上执行recv())。我已经查了几天了,似乎找不到我的错误。除了代码中的测试之外,我还使用了“netstat-an-ptcp”来检查连接状态

.net - Socket.SendAsync 未检测到无效的 TCP 连接

我遇到Socket.SendAsync方法未检测到死TCP连接的问题。在我的客户端/服务器应用程序中,服务器定期向连接的客户端发送心跳。我遇到的问题是,即使客户端可能已死,来自SendAsync方法的回调指示“SocketError.Success”并且Socket.Connected属性为真,即使客户端不再“活着””。因此,对于服务器来说,心跳数据似乎已正确发送并且客户端仍然存在。我每次都看到这个问题,客户端PC要么进入休眠/休眠状态,要么例如当客户端在VMWare实例中运行并且该实例被挂起时。当客户端关闭应用程序、从任务管理器中将其终止等时,我没有看到此问题。internalvoi

sockets - Erlang gen_tcp :recv(Socket, 长度)语义

看完thisanswer,我想了解是否同样适用于对gen_tcp:recv(Socket,Length)的调用。我对文档的理解是,如果缓冲区中有超过Length个字节可用,它们将保留在那里;如果少于Length字节,调用将阻塞,直到有足够的可用字节或连接关闭。特别是,当数据包以2个字节为前缀以小端顺序保存数据包长度时,这应该有效:receive_packet(Socket)->{ok,>}=gen_tcp:recv(Socket,2),gen_tcp:recv(Socket,Length).这是正确的吗? 最佳答案 是(或否,详见评

sockets - TCP套接字传输

前一段时间我有一个问题,为什么当我发送1024个八位字节时我的套接字有时只收到653个八位字节(例如),感谢Rakis,我明白了:操作系统允许以任意大小的block接收。这次我需要确认:)在任何操作系统上(至少是GNU/Linux和Windows),在任何语言中(我在这里使用Python),如果我发送一个随机字节数的数据包,可以是2个字节,可以是12000个字节,比方说X,当我写socket.send(X)时,我是否绝对保证在我做另一个套接字之前,X将在套接字的另一端被完全接收(不管接收操作系统将其分成任何block)。发送(任何字符串)?或者换句话说,如果我有代码:socket.se

sockets - 一台机器上的两个(或更多)套接字客户端连接

我有一个简单的node.js客户端和服务器程序在一台机器上运行,当我尝试同时使用客户端程序的第二个实例连接到服务器时,我得到了EADDRINUSE,Addressalreadyinuse错误.是否可以在同一台机器上有两个或多个基于TCP的套接字客户端连接(用createConnection创建)到一个服务器(用createServer创建),或者只有一个客户端程序可以同时连接到服务器? 最佳答案 是的,这是可能的。事实上,非常常见。许多应用程序打开数十个或数百个到同一服务器的连接。听起来您的客户端程序绑定(bind)在端口上。只有服

html - 带有 node.js/socket.io 的客户端 tcp?

我是node.js/socket.io的新手,所以我真的不知道我在做什么,但我在服务器端有这个:varapp=require('net'),fs=require('fs')varserver=app.createServer(function(socket){socket.write("Echoserver\r\n");socket.pipe(socket);socket.on('data',function(data){console.log(data);});});vario=require('socket.io').listen(server)server.listen(81);

sockets - TCP TIME_WAIT问题

我读过一本TCP和套接字编程书。我有一个问题,TCP的TIME_WAIT状态应该保持2MSL的时间周期为书中说。但是互联网如何探索类似的应用程序没有这个问题?根据文档,它是4分钟,但在Internetexplore我什至不必等待10秒来刷新网页?这是如何运作的?我很困惑,请解释。 最佳答案 有几种可能性,我在下面列出了其中一些。首先,并非所有session都经过TIME_WAIT状态。如果对方关闭连接,本地转换为ESTABLISHED、CLOSE_WAIT、LAST_ACK和CLOSED,所以有不涉及TIME_WAIT。其次,TIM