草庐IT

socket通信

全部标签

delphi - Indy 写缓冲/高效 TCP 通信

我知道,我问了很多问题......但作为一名新的delphi开发人员,我一直在思考所有这些问题:)这个使用indy10处理TCP通信。为了提高通信效率,我将客户端操作请求编码为单个字节(在大多数情况下,当然后面跟着其他数据字节,但在这种情况下只有一个字节)。问题是varBytes:TBytes;...SetLength(Bytes,1);Bytes[0]:=OpCode;FConnection.IOHandler.Write(Bytes,1);ErrorCode:=Connection.IOHandler.ReadByte;不会立即发送该字节(至少不会调用服务器执行处理程序)。例如,如

sockets - 当服务器套接字接受客户端套接字时到底发生了什么?

我正在学习套接字编程,服务器套接字accept()让我很困惑。我写了两个serversocketaccept()的场景,大家看看:当服务器套接字执行accept()时,它会创建一个新的(客户端)套接字,该套接字绑定(bind)到与服务器套接字所在端口不同的端口边界。因此套接字通信是通过新绑定(bind)的端口完成的,服务器套接字(仅用于accept())正在等待原始绑定(bind)端口上的另一个客户端连接。我认为这不太正确,因为(1)端口与单个进程匹配,以及(2)套接字接受是进程内部的事情,单个进程可以有多个套接字。所以想到了第二种情况,基于一些stackoverflow的答案:当服务

sockets - 了解WebSockets

我的理解是,套接字对应于网络标识符,端口和TCP标识符。[1]操作系统使进程能够与端口关联(IIUC是使进程可在网络上寻址入站数据的一种方式)。因此,WebSocket服务器通常将与一个端口相关联,该端口因接受和理解升级请求的HTTP而闻名(例如443),然后使用TCP标识符使单个服务器进程和单个端口同时打开多个网络套接字。。请有人可以确认或纠正我的理解吗?[1]“在每个TCP,我们会连接一个NETWORK标识符和一个TCP标识符使用端口名称来创建SOCKET名称,该名称将是唯一的在连接在一起的所有网络中。”https://tools.ietf.org/html/rfc675

sockets - node.js 的 "net"包中的 TCP socket.write 函数未写入套接字

我在使用node.js的net包将2条消息写入TCP套接字时遇到了一些问题。代码:varnet=require('net');varHOST='20.100.2.62';varPORT='5555';varsocket=newnet.Socket();socket.connect(PORT,HOST,function(){console.log('CONNECTEDTO:'+HOST+':'+PORT);//Writeamessagetothesocketassoonastheclientisconnected,theserverwillreceiveitasmessagefromth

sockets - WSAStartup 和 WSACleanup 的成本是多少?

我有一个c++win32程序,它使用套接字从服务器下载一些数据。在Windows上使用套接字之前,必须调用WSAStartup。MSDN说:“每次成功调用WSAStartup都必须调用WSACleanup。只有最终的WSACleanup函数调用才能执行实际的清理。”对我来说最简单的方法是每次从服务器下载少量数据时调用WSAStartup/WSACleanup。大多数情况下一次只有一个连接,因此WSACleanup将执行实际清理。这就是为什么我想知道WSAStartup和WSACleanup的成本是多少?我的意思是执行实际清理。如果与整个套接字连接相比,对WSAStartup和WSACl

sockets - ZeroMQ可以用来接受传统的socket请求吗?

我正在尝试使用ZeroMQ重写我们的一个旧服务器,现在我有以下服务器设置(适用于Zmq请求):using(varcontext=ZmqContext.Create())using(varserver=context.CreateSocket(SocketType.REP)){server.Bind("tcp://x.x.x.x:5705");while(true){...}如果我使用Zmq客户端库连接context.CreateSocket(SocketType.REQ),这种设置工作正常但不幸的是,我们有很多遗留代码需要连接到此服务器,并且套接字是使用.net套接字库创建的:Sock

language-agnostic - 基于 TCP/IP 的语音通信

我目前正在开发使用DirectSound在内联网上进行通信的应用程序。我有使用UDP的工作解决方案,但后来我的老板告诉我他出于某种原因想要使用TCP/IP。我试图以与UDP几乎相同的方式实现它,但收效甚微。我得到的基本上只是噪音。其中20%是录制的声音,其余只是奇怪的噪音。我猜测原因是TCP需要多次读取所有接受的数据,直到它得到我可以播放的最终声音。现在两个问题:我走在正确的轨道上吗?将TCP/IP用于此类应用程序(各种语音session)甚至是个好主意吗?我是用C#做的,但我不认为这是特定于语言的。 最佳答案 不,使用TCP是一个

java - Android TCP 服务器客户端通信

我找到了一个写得很好的教程here用于android上的服务器客户端通信。奇迹般有效。但这只是一种沟通方式。我正在尝试在客户端中收听服务器响应,但不知道我哪里错了。这是我尝试进行更改的服务器代码。服务器publicclassServerextendsActivity{privateServerSocketserverSocket;HandlerupdateConversationHandler;ThreadserverThread=null;privateTextViewtext;publicstaticfinalintSERVERPORT=8080;@Overridepublicvo

java - 在 Java 中,如何从已打开的 C 套接字的文件描述符中获取 Socket 或 DatagramSocket?

我有一个分为两部分的Linux程序。一部分进行NAT遍历以获得UDP套接字(UDP打洞)或TCP套接字(TCP打洞)。第一部分是用C编写的,以允许促进或增强NAT遍历过程的native功能。第二部分实际使用的是通过第一部分执行的NAT穿越获得的已连接套接字。问题来了。我希望第一部分(获取套接字的部分)独立于第二部分(将套接字用于特定应用目的的部分)。例如,我希望第一部分可重复用于各种不同的应用程序,这些应用程序都需要在对等点之间建立UDP和TCP连接。现在,我希望第二部分(应用程序部分)用Java而不是C或C++编写。我希望第二部分使用由负责NAT遍历的C代码获得的套接字连接。假设第一

sockets - 如何进行 TCP 打洞?

问题如下。这是我当前没有成功的测试代码。staticvoidMain(string[]args){if(args.Count()!=3){Console.WriteLine("Badargs");}varep=newIPEndPoint(IPAddress.Parse(args[0]),int.Parse(args[1]));varlp=newIPEndPoint(IPAddress.Any,int.Parse(args[2]));vars=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);