- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
遇到以下问题。从文本文件中读取数据。每 40 毫秒向服务器发送一次数据。服务器必须将数据读入单独流中的无限循环。但这并没有发生。怎么了?
客户:
class Client
{
private TcpClient _client;
private Stream _stream;
private Boolean _isConnected;
private double[] _values;
public Client(String ipAddress, int portNum)
{
_client = new TcpClient();
_client.Connect(ipAddress, portNum);
}
public void SendValues(double[] values)
{
_values = values;
HandleCommunication();
}
public void HandleCommunication()
{
_isConnected = true;
_stream = _client.GetStream();
var dataBytes = new List<byte>();
foreach (double value in _values)
{
dataBytes.AddRange(BitConverter.GetBytes(value));
}
_client.SendBufferSize = _values.Length * sizeof(double);
_stream.Write(dataBytes.ToArray(), 0, _client.SendBufferSize);
Console.Write("Sending...");
_stream.Flush();
}
发送数据:
public partial class MainWindow : Window
{
private double[] values;
private System.Timers.Timer timer = new System.Timers.Timer(40);
Client _client = new Client("127.0.0.1", 55443);
public MainWindow()
{
InitializeComponent();
OpenSrcFile();
timer.Elapsed += TimerOnElapsed;
timer.Enabled = true;
}
private void TimerOnElapsed(object sender, ElapsedEventArgs e)
{
Console.WriteLine("is sending...");
_client.SendValues(values);
}
public void OpenSrcFile()
{
List<string> lines = File.ReadAllLines(@"file.txt").ToList();
string r = lines[0];
int sizeX = int.Parse(lines[1]);
lines.RemoveRange(0, 2);
values = GetValues(lines.ToArray());
}
private double[] GetValues(string[] lines)
{
return lines.Select(line => double.Parse(line.Replace(" ", ""), CultureInfo.InvariantCulture)).ToArray();
}
服务器:
class Server
{
private TcpListener _server;
private Boolean _isRunning;
public Server(int port)
{
_server = new TcpListener(IPAddress.Parse("127.0.0.1"), port);
_server.Start();
_isRunning = true;
}
public double[] GetData()
{
// wait for client connection
TcpClient client = _server.AcceptTcpClient();
Console.WriteLine("Connected!");
var stream = client.GetStream();
byte[] buffer = new byte[256*sizeof (double)];
stream.Read(buffer, 0, buffer.Length);
double[] newValues = new double[buffer.Length/sizeof (double)];
for (int i = 0; i < newValues.Length; i++)
{
newValues[i] = BitConverter.ToDouble(buffer, i*sizeof (double));
}
stream.Flush();
return newValues;
}
}
接收数据,但由于某些原因不起作用
public partial class MainWindow : Window
{
private Thread _thread;
private double[] _values;
private Server _server = new Server(55443);
public MainWindow()
{
InitializeComponent();
InitializeThread();
}
private void InitializeThread()
{
_thread = new Thread(GetData);
_thread.IsBackground = true;
_thread.Start();
}
private void GetData()
{
while (true)
{
_values = _server.GetData();
Console.WriteLine("...");
}
}
}
好的,客户端发送一个字节数组,这部分工作正常。然后我们需要在单独的线程中将这个字节数组放入无限循环中。就像在这个地方:
private void InitializeThread()
{
_thread = new Thread(GetData);
_thread.IsBackground = true;
_thread.Start();
}
private void GetData()
{
while (true)
{
_values = _server.GetData();
Console.WriteLine("...");
}
}
但是不知何故,服务器只接收到一个字节数组,接下来什么也没有发生。您可以在代码中找到函数 GetData
最佳答案
你把循环放错地方了!
您的客户端仅连接一次;哪个是对的。但是,在您的 GetData
函数中您接受了一个新连接。因此,在第一次读取之后,循环再次调用 GetData
,这会在等待新连接时阻塞,但什么也没有发生。
相反,您想在服务器类本身中循环调用 Accept
,当您获得连接时,为它启动一个“Read”线程(当您获得数据时引发一个事件) .在处理服务器操作的主应用程序中不应有循环。
关于C# TCP 服务器-客户端 : can't receive data from the client in an infinite loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26720229/
我正在使用 NDK 为 Android 编写一个实用程序。 在我的实用程序中,我 fork 了一个进程,并在该进程中运行以下代码: //Screenshot thread int i = 0; for
我是 React 新手,正在构建一个表单。该表单由多个组件组成的集合组成。组件之一是文本字段。 我想创建一个按钮,只需单击即可添加无限数量的相同文本字段组件。我对如何执行此操作感到困惑,并且在网上找不
我需要每 5 秒无限地写入一个文件 (.txt)这是我的代码: #include #include #include #include #include using namespace st
出于好奇,是 全部 无限循环不好? 如果您运行无限循环,会发生什么不良影响和后果? 另外,如果它们不全是坏的,您能否举一些例子,它们何时可以用于有意义的目的? 他们是否需要关闭实例?例如,我们总是在
下面是我的智能合约。当我将它放入混音中时,我会收到有关以下每个功能的警告。 函数 MedicalRecord.addNote(bytes32,bytes32) 的 Gas 要求高:无限。 函数 Med
CPDT的第三章简要讨论了为什么Coq中禁止使用负感应类型。如果我们有 Inductive term : Set := | App : term -> term -> term | Abs : (te
我有一个包含 6 个页面且启用分页的 UICollectionView 和一个 UIPageControl。我想要的是,当我来到最后一页时,如果我向右拖动,UICollectionView 会从第一页
如何以编程方式在 Excel 工作表中创建“无限”符号? 最好来自 Java...但也欢迎其他提示。 谢谢。 最佳答案 “无穷大符号”字符位于 unicode 的代码点 0x221E 中。执行此操作的
如果我想迭代值 0 到 255 并且我使用无符号字节作为计数器,当计数器达到 255 时返回到 0 并进行无限循环。 for (ubyte i = 0; i < ubyte.max; i++)
如果需要全部32位来存储从-2^31到2^31,它如何存储+和-无穷大?它使用更多内存吗?存储这些值是否良好且安全? 更新:感谢答案,我知道只有 float 据类型可以存储 Inf 值,整数不能。 最
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
在下面的设置中,如何绘制一条通过两点的“无限”线? var context = document.getElementById("canvas").getContext("2d"); var poin
我正在测试一个简单的汇编函数 (SPARC)。该函数如下,应该有两个参数,x 和 *str,并计算 x 在 *str 中出现的次数。但是,该函数会导致无限循环。我正在使用 C 来调用汇编函数,这也在下
我有很多内容要在网站上显示,因此我需要使用“无限”滚动解决方案,当用户滚动到当前加载内容的末尾时加载内容。但是,我确切地知道有多少数据,我希望用户对此有所了解。我不喜欢滚动条如何让你看起来快到内容的末
我想实现无限滚动。下面是我的布局的简短形式。因为我有一些相对定位的元素,javascript 滚动事件不会触发。 如何解决此问题才能触发滚动事件并实现无限滚动? 我的主要布局是:
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭3年前。 Improve th
如何定义类型 InfiniteFunction ,这是一个函数,调用时返回另一个 InfiniteFunction 类型看起来像: () => () => () => ... // infinite
我正在尝试为此模式创建匹配项: /page/some/thing/is/written/here 其中/page 将始终匹配 a-zA-Z0-9 并且/page 之后的所有内容都可以包含字符 a-zA
我正在使用一个“通用”js 片段,它应该检测用户是否滚动到文档底部: $(window).scroll(function() { if ($(window).scrollTop()
当我尝试初始化 Fabric ui 日期选择器字段的值时,我收到 @@redux-form/INITIALIZE 消息的无限循环 function mapStateToProps(state) {
我是一名优秀的程序员,十分优秀!