Tag: networkstream

.NET NetworkStream读取缓慢

我有一些网络代码来处理任意TCP连接。 这一切似乎按预期工作,但似乎很慢。 当我对代码进行分析时,似乎在NetworkStream.Read()中花费了600毫秒,我想知道如何改进它。 我已经摆弄了缓冲区大小,并在一个巨大的缓冲区之间交替,一次性读取所有数据或者将数据连接到StringBuilder中的小数据。 目前我正在使用的客户端是一个Web浏览器,但是这个代码是通用的,它可能不是发送给它的HTTP数据。 有任何想法吗? 我的代码是这样的: public void StartListening() { try { lock (oSyncRoot) { oTCPListener = new TcpListener(oIPaddress, nPort); // fire up the server oTCPListener.Start(); // set listening bit bIsListening = true; } // Enter the listening loop. do { // Wait for connection TcpClient newClient = oTCPListener.AcceptTcpClient(); // queue a request to […]

从C#中的蓝牙设备获取数据

我正在尝试从医疗BT设备获取数据,我已经配对了代码和通信协议。 寻找一些代码,我有这个代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using InTheHand.Net.Sockets; using InTheHand.Net; using InTheHand.Net.Bluetooth; using InTheHand.Windows.Forms; using System.Net.Sockets; using System.Diagnostics; using System.Threading; namespace dConsoleApp { static class Program { // My BT USB adapter private static BluetoothEndPoint EP = new BluetoothEndPoint(BluetoothAddress.Parse(“00:02:72:CD:9A:33”), BluetoothService.BluetoothBase); private static BluetoothClient BC = new BluetoothClient(EP); // The BT device […]

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 […]

非连接套接字上不允许操作 – C#4.0

它持续出现错误“线路上不允许在非连接套接字上操作” var ServerStream = Connect2Server.GetStream(); 而且我不确定为什么 下面是该函数的其余代码 var buffersize = 0; var Convert2Tet = new ASCIIEncoding(); var Connect2Server = new TcpClient(); var ServerEndPoint = new IPEndPoint(IPAddress.Parse(“127.0.0.1”), 8801); var ServerStream = Connect2Server.GetStream(); Console.WriteLine(“Connecting to Server”); Connect2Server.Connect(ServerEndPoint); var WelcomeMessage = new byte[4096]; ServerStream.Read(WelcomeMessage, 0, 4096); Console.Write(Convert2Tet.GetChars(WelcomeMessage)); var UserCredentials = Console.ReadLine(); buffersize = Convert2Tet.GetByteCount(UserCredentials); var Credentials = new […]

为什么流不支持查找操作?

我目前正在使用tcp / ip套件。 我正在编写一个程序来加密发送方端的文件,并在接收方进行解密。 我在使用网络流的长度初始化我的字节数组时遇到了这个exception。 这是我的代码: if (client.Connected) { NetworkStream binarystream = client.GetStream(); byte[] receivebytes = new byte[binarystream.Length]; binarystream.Read(receivebytes, 0, receivebytes.Length); Stream file = File.OpenWrite(saveFileDialog1.FileName); file.Write(receivebytes, 0, receivebytes.Length); file.Close(); binarystream.Close(); } 控制层次结构确保client.GetStream()返回的流在构成二进制流实例之前已经用过。 我得到的例外是包含以下内容的行: byte[] receivebytes = new byte[binarystream.Length]; 它表示流不支持搜索操作。 那是什么意思?

C#为什么不“刷新”强制网络流中的字节?

我有一个项目,我正在尝试将序列化对象发送到服务器,然后等待“OK”或“ERROR”消息返回。 我似乎遇到了类似的问题: TcpClient发送/关闭问题 问题是,我似乎能够发送原始对象的唯一方法是关闭连接,但然后(当然)我迫不及待地想看看服务器是否成功处理了对象。 private void button4_Click(object sender, EventArgs e) { RequestPacket req = new RequestPacket(); /// … Fill out request packet … /// Connect to the SERVER to send the message… TcpClient Client = new TcpClient(“localhost”, 10287); using (NetworkStream ns = Client.GetStream()) { XmlSerializer xml = new XmlSerializer(typeof(RequestPacket)); xml.Serialize(ns, req); /// NOTE: This doesn’t […]

C#:实现NetworkStream.Peek?

目前,C#中没有NetworkStream.Peek方法。 实现像NetworkStream.ReadByte这样的函数的最佳方法是什么,除了返回的byte实际上没有从Stream删除?

读取NetworkStream = 100%的CPU使用率

我正在从一个while循环的NetworkStream中读取。 问题是我看到100%的CPU使用率。 有没有办法阻止这种情况发生? 这是我到目前为止: while (client != null && client.Connected) { NetworkStream stream = client.GetStream(); data = null; try { // Check if we are still connected. if (client.Client.Poll(0, SelectMode.SelectRead)) { byte[] checkConn = new byte[1]; if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0) { throw new IOException(); } } if (stream.DataAvailable) { //Read the first command WriteToConsole(“Waiting […]

C# – TcpClient – 检测流的结束?

我试图将一个古老的网络摄像机连接到我的计算机,我陷入了一个非常根本的问题 – 检测流的结束。 我正在使用TcpClient与摄像头通信,我实际上可以看到它传输命令数据,这里没有问题。 List incoming = new List(); TcpClient clientSocket = new TcpClient(); clientSocket.Connect(txtHost.Text, Int32.Parse(txtPort.Text)); NetworkStream serverStream = clientSocket.GetStream(); serverStream.Flush(); byte[] command = System.Text.Encoding.ASCII.GetBytes(“i640*480M”); serverStream.Write(command, 0, command.Length); 回读响应是问题的开始。 我最初认为像下面的一些代码一样简单: while (serverStream.DataAvailable) { incoming.Add(serverStream.ReadByte()); } 但它没有,所以这次使用ReadByte()进行了另一个版本。 描述说明: 从流中读取一个字节并使流中的位置前进一个字节,如果在流的末尾则返回-1。 所以我想我可以实现以下几点: Boolean run = true; int rec; while (run) { rec = serverStream.ReadByte(); if (rec == -1) […]

获取NetworkStream中可用的数据长度

我希望能够从C#中的TCP网络流中获取可用数据的长度,以便在从网络流中读取之前设置缓冲区的大小。 有一个NetworkStream.Length属性但它尚未实现,我不想为缓冲区分配一个巨大的大小,因为它会占用太多空间。 我做这件事的唯一方法是在数据传输之前与另一个告诉大小,但这似乎有点混乱。 这对我来说最好的方法是什么。