我几乎完成了这项任务,但由于我得到了部分结果. 我在其中存在TCP IP插座连接之间的服务器(Linux或Windows)和客户端(iOS).我已经在iPhone模拟器中使用了表单负载,在应用程序打开时,服务器和iPhone之间的连接会自动发生.服务器将数据发送给我在模拟器上发送的内容并将其打印在日志中.但是我无法完全收到整个响应.对于"创新",我也许只是在"或" Innova"等中收到的. void TCPClient() { CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, host, port, &readStream, &writeStream); [NSThread sleepForTimeInterval:2]; //Delay CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket
以下是关于 tcpclient 的编程技术问答
我可以在任何地方找到任何Docutionatin,并且想知道尽可能快地发送多个消息的最佳方法. 例如,如果我有300个设备从一台服务器接收消息,最好发送一条大消息,并让设备挑选所需的零件或发送300条消息,但以大小的1/300发送.他们只会是小刺,所以300个偏差只会得到6个字节 它有区别吗? 谢谢. 解决方案 如果启用了套接字的纳格尔算法,则在给定连接上发送多个较小的消息通常比在同一连接上发送较大的较大消息要慢. Nagle缓冲区内部出站数据,必须等待足够的数据进行缓冲和/或时间,以便它可以发送有效的消息.对于通用套接字使用情况,通常优选使用Nagle,因为它在大多数应用程序中可以接受的速度,性能和开销之间提供良好的平衡.但是,如果您需要发送时间敏感的消息,则通常必须禁用nagle,以便尽快单独发送每个消息. 您所描述的是,对于TCP,不可能向多个设备发送一条消息.大概这些设备每个设备都与服务器直接具有自己的TCP连接.要向所有300个连接发送一条消息,
我正在击中的TCP服务器(尝试使用内置的节点TLS套接字)期望以一定顺序发送/接收的发送/接收过程(发送,接收成功,发送更多消息,成功,发送更多,发送更多,发送更多信息, ETC).接收消息没有任何东西可以让我知道哪个发送的响应是在响应它,因此我无法轻松地使用内置的TCP节点库的流媒体性质. 关于在节点中处理这种情况的最佳方法的任何想法? 示例(python),这是该过程的示例: s.send("hello") s.send("send this 1") reply = s.recv() message = reply[0] if message == OK: print('Got OK for hello') s.send("send this 2") reply = s.recv() message = reply[0] if message ==
[如您所见,我不太了解TCP服务器和客户端的基本概念,并且可能是不可能的. ..] socket.io有一件美丽的事物可以发出事件并在另一侧捕捉事件,它在第一页(http://socket.io)中.我可以做类似的事情,但是使用nodejs"常规" net"模块?如果不是,那么等效是什么? 我尝试了: server.js var server = net.createServer(function(socket) { socket.on("connect",function() { socket.emit('test',{msg : 'did you get it ?'}); }); }).listen(8000); client.js var client = net.createConnection(8000, localhost); client.on('connect',function(){ client
我有一个vb.net应用程序,可以打开插座并在上面倾听. 我需要使用在浏览器上运行的JavaScript通过此应用程序与该应用程序进行通信.那是我需要在此套接字上发送一些数据,以便在此套接字上侦听的应用可以获取数据,使用一些远程调用进行一些操作,并获取更多数据,然后将其放回我的JavaScript需要的插座上在浏览器中阅读并打印. ive尝试过,socket.io,websockify,但没有事实证明没有用. 因此,问题,我正在尝试什么?是否有一种方法可以使在浏览器中运行的JavaScript可以连接到TCP套接字,并发送一些数据并在插座上收听一些数据响应并将其打印到浏览器中. 如果可能的话,我可以朝着正确的方向上的某个点来确定目标. 解决方案 关于您的问题,目前您必须依靠XHR或WebSocket. 当前,没有流行的浏览器为JavaScript实施了任何此类RAW Sockets API,使您可以创建和访问原始插座,但是在JavaScript中实现
我有一个很小的VB.NET程序,该程序有一个消息框并提交按钮!只是为了进行演示,例如,当发送" hi"时,它以"你好吗"回复(同样,只是为了演示.如果很简单,我会将代码转换为php).我希望此程序在运行NGINX的Ubuntu Server中的某些端口上收听.而不是拥有输入框和一个按钮,而只是接受传入的字符串,然后将回复字符串发送回客户端. 我尝试创建服务器程序,然后使用Mono在我的小服务器上运行它.但是这个代码(服务器端)甚至在我的计算机上也无法正常工作: Dim msg As String Dim Data As String Do Until isListining = False If server.Pending = True Then Client = server.AcceptTcpClient Data = New StreamReader(Client.GetStrea
当您知道为什么已发送的字符串" kamote"到服务器,而从服务器接收的" kamote"的字符串不相同. 客户端 tcpClient = new TcpClient(); tcpClient.Connect(ServerIP, Port); connectionState = (HandShake("kamote", tcpClient)) ? "Connected to " + ServerIP.ToString() : "Host unreachable."; private bool HandShake(String str, TcpClient tcpClient) { using (NetworkStream ns = tcpClient.GetStream()) { byte[] toServer = Encoding.ASCII.GetBytes(str);
我已经为我的服务器编写了此代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Threading; using System.Net.Sockets; using System.IO; namespace ConsoleApplication1 { class Program { private static bool terminate; public static bool Terminate { get { return terminate; } }
我试图以编程方式将命令发送到TOR控制端口,以使其刷新链条.我找不到C#中的任何示例,我的解决方案无法正常工作.请求时间.我的服务正在运行,我可以看到它在控制端口上侦听. public string Refresh() { TcpClient client = new TcpClient("localhost", 9051); string response = string.Empty; string authenticate = MakeTcpRequest("AUTHENTICATE\r\n", client); if (authenticate.Equals("250")) { response = MakeTcpRequest("SIGNAL NEWNYM\r\n", client); } client.Close(); return response; } public string Ma
是否有一种方法可以配置插座期望在确定连接失败之前收到ACK的超时? 我知道这也可以在应用程序级别上完成,但是由于我发送的每个数据包都是ACK的,而且我只想知道是否已收到我的数据,因此使用应用程序级别的其他数据来完成同一件事似乎很浪费. (更不用说,我的特定应用程序使用每个字节充电的蜂窝链路.) 注意:根据我以前的问题 - 哪些条件导致networkStream.write.write to Block to Block? - 您不能依靠在.Write抛出异常以确定数据未正确发送的情况下. 解决方案 这是一个古老的问题,但是它与我联系在一起...正如您最初的问题所暗示的那样,这应该在应用程序层进行. 我希望自己的经验可能会有所帮助,因为我的想法与您完全相同(甚至与团队中的其他开发人员都在坚持使用TCP来完成工作应该完成工作).实际上,与无线连接,网络MTU相互冲突以及有时实现的路由器/访问点相互冲突的TCP很容易弄乱TCP.而且还因为TCP旨在从一个来源流到一个目
我正在创建简单的代理服务器,但我面临着一个奇怪的情况,我遵循代码: var clientRequestStream = _tcpClient.GetStream(); var requestHeader = clientRequestStream.GetUtf8String(); GetUtf8String是Stream类的扩展方法,该方法读取流(包含HttpRequest标头).我需要提取这些标题以访问主机并请求的URL.读取网络流完成后.我需要执行搜索操作并设置其clientRequestStream.Position = 0;,因为我已经阅读了该流并将其写入另一个远程NetworkStream. . 我不知道该如何解决此问题.任何建议都会有所帮助. 编辑:我还尝试了复制网络流到memorystream,然后在MemoryStream上执行搜索操作,这也不例外,但是当我想从NetworkStream中阅读时,其缓冲区始终始终为空. 还使用反射器来查看Stre
出于安全原因,我想阅读证书详细信息(例如到期日期或CN). 通常在可用的网络类中有一些属性,可以检查证书. WP8实现中缺少这. 我还尝试创建一个SSLSTREAM,但也无法获得任何证书详细信息,例如 remotecertificate on .net 4.5. var sslStream = new SslStream(new NetworkStream(e.ConnectSocket)); sslstream缺少有关安全性的所有内容.因此,赏金castle和其他图书馆也无法获得证书,因为基础框架不支持它. 所以我的问题是: 我可以阅读CN或其他如果没有,如何使用 问候 Holger 解决方案 我向Microsoft .NET团队发出了用户语音请求,要求他们提供用于从便携式类库中读取服务器SSL证书详细信息的解决方案(也针对WP8).您可以在此处投票:其他解决方案 在Windows Phone 8.1上可以使用 httpclient ,以及
我正在用C#编写客户端/服务器应用程序,而且情况很棒.就目前而言,一切都起作用了,一切都非常强大.我的问题是,我在连接上发送数据包时会遇到一些延迟. 在客户端我正在这样做: NetworkStream ns = tcpClient.GetStream(); // Send packet byte[] sizePacket = BitConverter.GetBytes(request.Length); byte[] requestWithHeader = new byte[sizePacket.Length + request.Length]; sizePacket.CopyTo(requestWithHeader, 0); request.CopyTo(requestWithHeader, sizePacket.Length); ns.Write(requestWithHeader, 0, requestWithHeader.Length); // Receive
客户端代码: TcpClient client = new TcpClient(); NetworkStream ns; private void Form1_Load(object sender, EventArgs e) { try { client.Connect("127.0.0.1", 560); ns = client.GetStream(); byte[] buffer = ReadFully(ns, client.Available); //working with the buffer... } catch { //displaying error... } } public static byte[] ReadFully(NetworkStream stream , int initialLength) { // If we
我需要开发将连接到TCP服务器的服务.主要任务是读取传入消息,并在十分钟之内将命令发送到服务器,就像同步命令一样.例如,我使用了TCPCLIENT对象,如下所示: ... TcpClient tcpClient = new TcpClient(); tcpClient.Connect("x.x.x.x", 9999); networkStream = tcpClient.GetStream(); clientStreamReader = new StreamReader(networkStream); clientStreamWriter = new StreamWriter(networkStream); while(true) { clientStreamReader.Read() } 另外,当我需要用任何方法写出东西时,我会使用: clientStreamWriter.write("xxx"); 这种用法正确吗?还是有更好的方法? 解决方案 被
当我在其他网络上时,我无法连接到TCP服务器 我正在尝试连接到我在另一个网络上创建的TCP服务器,但我没有运气.有办法这样做吗? 我需要放入客户端程序的IP地址是什么? 如果您在网络上,服务器正常工作,但是我如何连接我在其他网络上? 我试图与外部IP地址连接,但是消息只是坐在路由器上,如何使路由器将消息发送到我的PC? 我做错了什么 我如何修复 解决方案 您的TCP服务器应在具有公共(外部)IP地址的系统上.然后,即使客户在LAN内部,客户也将能够连接到服务器.请注意,LAN中的IP Adress与外部IP地址不同.翻译称为nat. 因此,由于您的服务器在LAN内部的计算机上运行,因此Internet上其他计算机无法访问.另一方面,您的路由器具有一个公共IP地址,可以从Internet访问.您可以配置路由器以将端口转发到计算机,以便路由器将服务器与Internet连接起来.请注意,端口转发通常是一种不良的安全实践.确保您选择一个其他任何程
我有一个TCP客户端/服务器,我想检测客户端的连接损失;因为我的客户端有多个接口,并且一次与其中一台连接到服务器,所以我想知道如何检测客户端的连接损失,以便我可以将我的TCP客户端与服务器连接到服务器,如果所有接口在下降,我将数据存储在文本文件中.我用谷歌搜索了它,我已经看到了保持活力的,但这不是我想要的. 如果重要的话,我的项目在Linux中,代码在C ++中. 解决方案 我发现的最佳方法是检查缓冲区,如果缓冲区为空,则意味着您的TCP客户端将数据包成功地发送到TCP服务器,并且您可以发送下一个数据包;对于检查缓冲区,您可以使用SIOCOUTQ;它非常易于使用,并向您展示您的缓冲区中有多少数据. 其他解决方案 尝试从插座读取.插座关闭时,读取将失败,为您提供简单的检测.您可以在专用的检测线程中执行此操作,以使主线程不会阻止. 其他解决方案 TCP连接设计为纠正误差,而不是关键时间.此错误校正包括网络超时. 读取和写入不会失败,直到插座实际关闭,这可能
我正在尝试编写本地代理应用程序.我知道代理应用程序在理论上如何起作用. 我已经完成了与处理传入连接有关的所有事情.但是问题是我应该如何将客户要求的请求发送到指定的URL.当我尝试与指定的URL和端口创建一个连接时,它会以例外方式抛出: 没有这样的主机 编辑:我认为我应该绕过诸如Firefox之类的代理人甚至在系统代理集. 任何想法都会有所帮助. 预先感谢. 解决方案 这些链接可能有帮助: http://www.replicator.org/journal/201011170043-net-connecting-a-tcpclient-tcpclient-though-anough-an-http-proxy-with-authentication 其他解决方案 基于Colinsmith提供的链接,我已经完成了使用TCPCLIENT绕过代理的链接.这是我的方式: public static TcpClient CreateTcpClie
我有一个打开的TCP连接,并使用NetworkStream.BeginRead()读取.一旦连接在任一端都关闭后,调用了回调,流对象是没有用的 - 就像文档所说的那样,EndRead()抛出ioexception或ObjectDisposedException,具体在这种情况下终止连接. . 它是否可以保证仅在最后一个成功的Endread(和重新读取)和断开连接之间我没有任何数据,尤其是在我最后做的情况下?如果不是这样,如果我要关闭连接的目的结束,则在断开连接时必须手动networkStream.read.()确保没有任何内容,请未留下任何内容? 解决方案 在这种情况下要使用的模式是使用BeginRead读取流(就像您在做的一样)并处理回调方法中的"更多数据". 回调方法调用EndRead并从流中收集读取的数据(通常是通过将其附加到StringBuilder实例上),然后调用开始再次阅读.一旦EndRead返回0字节,您就可以保证从流中读取没有更多的数据. 这是您
我想知道,在使用TCPCLIENT发送数据时,是否有任何形式的CRC 检查自动起作用的算法?或者,如果数据未正确到达远程主机,我必须实现自己的算法并重新发送数据? 解决方案 那里是TCP 的校验和.但是,正如同一篇文章所说的那样, 按照现代标准,TCP校验和是薄弱的检查.具有高钻头错误率的数据链路层可能需要其他链接校正/检测功能.弱校验和通过在TCP和IP下方的第2层的共同使用或更好的完整性检查(例如PPP或以太网帧中使用)来部分补偿. . 因此,如果您对此有担忧,也许添加另一个检查不会有任何伤害. 其他解决方案 TCP校验和相当薄弱,但对于可靠的流协议而言,足够好.通常,在数据链路层上执行更多可靠的校验和,即以太网(IIRC)使用CRC -32. . 如果您真的想滚动,在这里是一份详细的指南对理论和实施. 其他解决方案 TCP包含一个校验和,TCP/IP堆栈将检测到破损的数据包.因此,除非您愿意,否则您无需单独实施任何错误检测算法.