Tag: tcp

Tcp可靠性与Udp负载对于认真,高性能的服务器

速度,优化和可扩展性是Udp和Tcp协议之间的典型比较。 Tcp吹嘘可靠性有一点额外开销的缺点,但速度很好,非常好。 一旦Tcp套接字被实例化,保持套接字打开需要一些开销。 但与Udp所描述的负担相比,哪种协议实际上有更多的开销? 我也听说过Tcp存在可扩展性问题……但是互联网(网页/服务器)在Tcp上运行 – 那么Tcp是什么阻碍了可扩展性呢? 好的…所以Udp不需要保持连接打开的开销。 但是,它要求您编写额外的方法以确保所有数据包都到达那里,希望按照您希望它接收的顺序。 如果未完整收到数据包,则必须告知客户端或服务器重新发送。 此外,您还必须为部分数据包保留某种消息收集,重建部分消息,并在最终处理消息之前检查完整的消息。 更不用说如果消息的第二部分永远不会成功,你必须要么重新发送整个事物,要么重新发送我们缺少的部分,或者其他什么。 基本上,我的问题是: 为什么我会选择Udp over Tcp来获得一个严肃的高性能服务器,它增加了消息检查和手动ACK的“开销”与连续流的“开销”? 如果Tcp对于魔兽世界来说足够好,为什么Tcp不被广泛接受作为游戏服务器使用的协议? 注意:我不反对为服务器实现Udp选项。 我们在.Net 3.5框架上使用C#。 因此,我也对处理Udp 负担的最佳实践感兴趣。 我也在套接字级别使用异步方法,而不是使用TcpListener,TcpClient等。

设置TCP / IP客户端和服务器以通过网络进行通信

我正在尝试学习一些关于套接字编程的知识,我偶然发现了TcpListener和TcpClient,因为我读到它们对于初学者来说稍微容易一些。 我想要完成的基本要点是拥有一个可以在我的笔记本电脑和同一网络上的另一台笔记本电脑上运行的小型表格,以便它们能够进行通信,即相互发送一串文本。 有了这个,我希望能进一步发展:) 到目前为止,我已经使用msdn和互联网上的各种指南创建了客户端和服务器程序。 我可以让他们在一台笔记本电脑上运行时进行通信,但是当我将客户端移动到另一台笔记本电脑时,我无处可去。 我认为我的主要问题是我不太了解客户端如何找到服务器IP,因为我认为我可以硬编码,但当我再次回来时,我确信IP会发生变化。 有没有办法让两者以更动态的方式连接以包含不断变化的IP? 我目前的客户代码: public void msg(string mesg) { lstProgress.Items.Add(“>> ” + mesg); } private void btnConnect_Click(object sender, EventArgs e) { string message = “Test”; try { // Create a TcpClient. // Note, for this client to work you need to have a TcpServer // connected to the same address as […]

为Windows应用程序实现webrtc数据通道

是否有任何机构知道如何将WebRTC DataChannel API实现为在C#中构建的Windows应用程序,以便在NAT后面的客户端之间发送TCP消息。 这不适用于Web应用程序,它仅适用于Windows。 任何意见或想法都非常感谢。 谢谢。

如何确定tcp是否已连接?

我有tcpclient对象,我想确定它是否连接。 我使用tcpclient的连接属性,但它返回上一次操作的状态。 所以没用。 那我用这个代码: bool flag; flag = (tcp.Client.Poll(10000, SelectMode.SelectWrite)); 和 if( tcp.Client.Poll( 0, SelectMode.SelectRead ) ) { byte[] buff = new byte[1]; if( tcp.Client.Receive( buff, SocketFlags.Peek ) == 0 ) { flag = false; } } 但它无法正常工作。 任何的想法? 这是我在服务器端的代码: private ArrayList _ClientList = new ArrayList(); public ClsServer(int port) { _TCPListener = new TcpListener(IPAddress.Any, port); […]

TCP从客户端和服务器读取和写入

我正在尝试创建一个可以在彼此之间来回读写信息的客户端和服务器。 我可以从客户端和服务器写入读取但不反之亦然,我不知道为什么。 这里似乎没有人知道我之前问过什么,而且我无法在网上找到任何有用的东西。 如果您知道请告诉我,不要告诉我去阅读有关TCP的文章,因为它根本没有用。 客户: namespace ExampleClient { public partial class Form1 : Form { public static bool IsConnected; public static NetworkStream Writer; public static NetworkStream Receiver; public Form1() { InitializeComponent(); } private void BtnConnect_Click(object sender, EventArgs e) { TcpClient Connector = new TcpClient(); Connector.Connect(TxtIP.Text, Convert.ToInt32(TxtPort.Text)); IsConnected = true; Writer = Connector.GetStream(); Console.WriteLine(“Connected”); System.Threading.Thread Rec […]

从UWP获取TCP服务器上的实时数据(更新)

下面是一种基本上将数据发送到TCP Server的方法。 UPDATE BEGINS HERE: ////////////////////////////////// private string FormatValueByPresentation(IBuffer buffer, GattPresentationFormat format) { // BT_Code: For the purpose of this sample, this function converts only UInt32 and // UTF-8 buffers to readable text. It can be extended to support other formats if your app needs them. byte[] data; CryptographicBuffer.CopyToByteArray(buffer, out data); if (format != null) […]

C#TCP服务器组合接收的数据

我正在研究一个粗略的TCP服务器/客户端。 它的工作方式如下:客户端向服务器发送消息>服务器将所有用户数据发送到每个客户端。 我有一个循环,因为我将在游戏中使用这种多人游戏数据传输。 但是,出于某种原因,我的服务器会将传入的数据组合成一个字符串,而不是逐行读取。 例如,对于用户数据,它应该读取类似john:0 | 0的内容,但它读起来像john:0 | 0john:0 | 0john:0 | 0john:0 | 0我尝试设置发送和接收延迟,但是如果我延迟超过100毫秒,它似乎只能起作用。 服务器 class Program { private static Socket _serverSocket; private static readonly List _clientSockets = new List(); private const int _BUFFER_SIZE = 2048; private const int _PORT = 100; private static readonly byte[] _buffer = new byte[_BUFFER_SIZE]; public static bool clientConnected […]

XML over TCP套接字

我想知道是否有人能够帮我解决我遇到的一个小问题。 我将收到一个将通过tcp套接字发送的xml文件。 我正在尝试创建一个可以充当服务器并通过tcp套接字发送xml文件的小应用程序。 然后,我可以开始测试将接收和处理此xml文档的初始应用程序。 我已经尝试过谷歌,并继续在这个问题上遇到问题。

使用套接字时发送当前值的Unity延迟

Visual Studio中的client.cs。 private void SendToServer(string HeartRate) { SetHRTest(HeartRate); try { s = client.GetStream(); StreamReader sr = new StreamReader(s); StreamWriter sw = new StreamWriter(s); sw.AutoFlush = true; sw.WriteLine(HeartRate); } finally { if(Environment.HasShutdownStarted) { s.Close(); client.Close(); } } } Unity中的server.cs using UnityEngine; using System.Collections; using System.Net.Sockets; using System.IO; using System.Net; using System.Threading; public class Server { public […]

中断后重新连接TCPClient

我有一个客户端应用程序的多个实例,通过TcpClient通过Internet连接到主应用程序。 (两者都由我编码)。 所以连接如下: TcpClient.Connect(ip,port) 我现在希望这可以处理各种类型的断开连接事件: 主应用程序(服务器)或客户端应用程序计算机失去Internet连接。 在恢复连接时,通信似乎丢失,但是当我尝试重新连接时,我收到消息: “已在已连接的套接字上发出连接请求” 所以我需要关闭并重新启动客户端应用程序。 主应用程序(服务器)已关闭,然后重新启动。 重新启动主应用程序,然后尝试重新连接客户端应用程序,会导致与上面相同的错误。 那么,我需要做什么? 每当发生此类中断时,是否需要在客户端应用程序中实例化新的TcpClient? 我没有尝试过,所以不知道这是不是一个糟糕的解决方案?