Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中的Tcp套接字编程中读取任何传入消息#_C#_Sockets_.net 4.5_Tcpclient - Fatal编程技术网

C# 如何在C中的Tcp套接字编程中读取任何传入消息#

C# 如何在C中的Tcp套接字编程中读取任何传入消息#,c#,sockets,.net-4.5,tcpclient,C#,Sockets,.net 4.5,Tcpclient,我有一个用.NET C#编写的服务器客户端程序。我已经使用了套接字编程,到目前为止,服务器和客户端都在工作。只有一个服务器实例,而我可以将多个客户端连接在一起。 现在,我的代码的工作方式与下面的场景类似。 当我启动服务器代码时,它会开始监听。当我启动客户机时,它会等待在控制台上写入命令。在我写了一些东西之后,客户机将它发送到服务器,然后服务器用它做一些事情,然后写一些东西回来。这就是循环的方式。就像一场乒乓球比赛。 我的客户机代码在这里可用 问题和我想要的: 有了这个功能,我的客户机无法监听服

我有一个用.NET C#编写的服务器客户端程序。我已经使用了套接字编程,到目前为止,服务器和客户端都在工作。只有一个服务器实例,而我可以将多个客户端连接在一起。 现在,我的代码的工作方式与下面的场景类似。

当我启动服务器代码时,它会开始监听。当我启动客户机时,它会等待在控制台上写入命令。在我写了一些东西之后,客户机将它发送到服务器,然后服务器用它做一些事情,然后写一些东西回来。这就是循环的方式。就像一场乒乓球比赛。 我的客户机代码在这里可用

问题和我想要的: 有了这个功能,我的客户机无法监听服务器,除非它向服务器写入了一些内容。我想让它在收到消息时都能听到。我的服务器代码很好,服务器的顺序(先听后写)也很好。客户端序列(写入侦听)也可以,但我的客户端只有在写入后才能读取。假设两个客户端正在与服务器通信。client1告诉服务器“嘿,我需要一些属于client2的东西”,然后服务器将向client2发送一条消息。使用当前代码,client2无法侦听消息,因为它实际上正在等待写入。希望我说清楚


我怎样才能做到这一点?任何代码示例都会很有帮助。谢谢。

您需要的不仅仅是客户端上的线程。一个用于接受控制台输入和发送,另一个用于读取TCP流(阻塞)和显示。让它看起来像控制台上的IRC有点棘手,因为用户编写的字符和接收到的字符会交错。

我实际上尝试了一些线程,可能是我用了错误的方式或其他什么,没有成功。你能用代码来表示吗?也许编辑我的粘贴箱?Thanks@Pro.metal不,请不要让别人替你做这项工作。相反,展示线程化实现,并描述哪些不起作用。或者谷歌的解决方案:你可能把我弄错了。不管怎样,这是我的密码。我对线程的理解还处于初级阶段,没有达到我想要的水平。YouTube链接的家伙没有完成他的项目。为什么要共享一个不完整的链接?我也试过了。没有帮助。只需调用BeginReceive()。每当服务器发送未经请求的内容时,您的回调就会运行。在处理数据并发送响应后再次调用BeginReceive()。@HansPassant我实际上担心从服务器接收整个数据。然后我决定在缓冲区上循环。但是我在服务器端使用了BeginReceive()。我再查一遍@HansPassant我发现BeginReceive()的问题是,代码只是在该部分阻塞,除非从服务器得到任何响应,否则不会继续。Read()方法不是这种情况,当缓冲区中没有任何内容时,它只返回0。我还是被卡住了。