NetworkStream.Read()不工作并抛出ArgumentOutOfRangeException
只是试图创建聊天服务器 - 客户 这是等待客户连接(可选)* 的服务器 TcpListener serverSocket = new TcpListener(8888); int requestCount = 0; TcpClient clientSocket = default(TcpClient); serverSocket.Start(); Console.WriteLine(" >> Server Started"); clientSocket = serverSocket.AcceptTcpClient(); Console.WriteLine(" >> Accept connection from client"); 然后,客户端连接到服务器(可选)* System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpC
0 2024-04-16
编程技术问答社区
如何使用grpc在客户之间通过服务器发送消息?
我正在尝试创建一个程序,以便客户能够相互发送消息.因此,当客户端发送消息时,该消息将发送到将其发送给收件人客户端的服务器.即时消息的问题是,如果客户不先将消息发送消息,服务器就无法将消息发送给客户端,那么如果客户不先首先发送任何内容,客户端如何通过服务器从另一个客户端接收消息. 这是我的原始文件: service Messenger { rpc SendMessage (stream Message) returns (stream Message) {} } message Message { string msg = 1; receiverId = 2; } 我还生成了类文件,并编写了以下示例发送消息的客户端和服务器功能: https://github.com/grpc/grpc/grpc/grpc/blob/v1.15.0/csharp/csharp/csharp/routeguide/routeguide/routeguide/routeguid
0 2024-04-15
编程技术问答社区
UWP应用程序不能从本地主机上的.NET桌面应用程序接收UDP数据报
我一直在尝试将UWP应用程序作为客户端和.NET桌面应用程序作为服务器之间设置客户端服务器.我正在使用UDP数据报作为两个之间的消息系统. 在这里,我的UWP代码在端口22222上聆听Localhost IP上的数据报: private async void listenToServer() { // Setup UDP Listener socketListener = new DatagramSocket(); socketListener.MessageReceived += MessageReceived; await socketListener.BindEndpointAsync(new HostName("127.0.0.1"),"22222"); Debug.WriteLine("Listening: " + socketListener.Information.LocalAddress + " " + socketL
0 2024-04-15
编程技术问答社区
WCF返回ArrayOfKeyValueOfintstringKeyValueOfintstring[]而不是Dictionary<int, string>和Array而不是List。
所以我已经花了几个小时来调查这个问题,很明显我不是唯一的一个.为什么我的字典和列表被返回为数组? 我知道为了兼容,数组被用作默认值. WCF有意识地努力使自己与.net相关.但是我的服务器和客户端都在c#.net中开发,所以我还可以. 这是仅在stackoverflow上的类似问题的样本: wcf服务返回阵列而不是列表 为什么WCF返回MyObject []而不是像我一样清单 期待? wcf wcf服务返回一系列字典 li> wcf代理返回阵列即使集合 type == generic.list wcf返回阵列而不是即使集合类型==列表 generic.list 为什么我的WCF服务返回和数组而不是列表? 我已经设置的内容: 我正在通过此命令生成代理: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>svcutil.exe /language:cs /out:generate
0 2024-04-14
编程技术问答社区
如何确保一个.Net应用程序是真实的?
在客户端服务器应用程序中,服务器如何知道请求来自真正的应用程序,而不是来自篡改的副本? 我仍然没有开发客户端或服务器应用程序.解决方案可以是普通的插座,WCF,IIS托管或其他任何内容. 解决方案 确实没有办法.您可以要求该应用程序提供的任何内容,Rogue应用程序都可能欺骗.最终答案是您不应该信任任何客户端应用程序.您可以信任用户身份验证的用户,但是客户本身是100%不信任的. 为了完全说明这一点,我可以通过代理服务器运行所有流量,并随意注入/删除消息.然后,您有一个合法的客户带有虚假消息. 现在,如果您正在谈论计划在客户端上使用的库,请确保没有被篡改,这就是强大的命名组件的目的.但这对您没有帮助. 其他解决方案 您无法"保证"您使用的是真实的客户端.计算机中确实没有"秘密";只有变得更加困难的事实.有些事情可能使您的客户更有可能是真正的交易: 身份验证.用户提供的数字签名,内部哈希和数据都使您更有可能与您交谈的可能性是您认为与之交谈的内容.但是,程序
0 2024-04-14
编程技术问答社区
在C#中,客户端应用程序寻找本地网络上的服务器的最佳方式是什么?
客户端使用funeinechannels连接到服务器(我们正在考虑切换到dotnetremoting).我的意思是获取要连接到的服务器的IP和端口号. 似乎是一种蛮力方法是尝试网络上的每个IP尝试活动端口(甚至不确定是否可能),但是必须有更好的方法. 解决方案 考虑广播特定的UDP数据包.当服务器或服务器看到广播的UDP数据包时,他们会发送回复.客户可以从所有服务器收集答复,并开始连接到它们或基于选举算法. 请参阅客户端的示例(未经测试的代码): using System.Net; using System.Net.Sockets; [STAThread] static void Main(string[] args) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); socket.Bind(new
0 2024-04-13
编程技术问答社区
当使用定义在一个强命名的程序集中的接口的旧版本创建一个客户端激活对象时,出现System.InvalidCastException
我对.net远程,版本控制和创建客户端激活的对象有一个查询. 这是场景: 有2个接口,位于自己的组装"共享类型"中:Iserver和iAccount. Iserver包含返回字符串的方法" getStatus"和返回IACCOUNT类型的" CreateAccount".这已注册到GAC中为v1.0.0.0. 服务器应用程序引用共享类型和实现Iserver和IACCOUNT,并带有具体类,服务器和帐户.这些是元帅对象.服务器应用程序将服务器类称为单例对象. 客户端应用程序引用共享类型,并通过iServer接口成功连接到远方的服务器对象.在这里,我可以成功地致电GetStatus和createAccount(返回客户端激活的对象).到目前为止都可以. 现在,我将共享类型的版本递增到v2.0.0.0并注册到GAC中,删除了旧的v1.0.0.0版本. 服务器应用程序是针对此版本构建的,但客户端不是. 现在,当我运行客户端应用程序时,它将按预期向Syst
0 2024-04-13
编程技术问答社区
C# SQLServer 检索结果并以.csv格式放置
我在网站上和Google上都看了看,但是我似乎找不到一个很好的解决方案. 基本上,我有一个客户端服务器应用程序(C#),在其中我向服务器发送SQL Select语句(连接到SQL Server 2008),并希望以CSV方式返回返回客户端. 到目前为止,我有以下内容: if (sqlDataReader.HasRows) { while(sqlDataReader.Read()) { //not really sure what to put here and if the while should be there! } } 不幸的是,我真的很不了解与SQL连接C#.我需要有关如何简单地将结果放入CSV格式的字符串的任何提示.这些列和字段可能会有所不同,因此我无法像我在几个站点中看到的某些东西的方法一样使用.我不确定我是否可以理解tbh! 我真的很感谢有关如何解决这个问题的任何提示/要点! 解决方案 这是我
2 2024-04-12
编程技术问答社区
c#中的多客户、异步套接字,最佳实践?
我正在尝试更好地了解C#中的TCP/IP插座,因为我想挑战自己,以查看是否可以创建一个工作的MMO基础架构(游戏世界,地图,玩家等),纯粹是出于教育目的我无意成为" OMGZ IZ会让我的R0x0r mmorpg,那会比哇!!!",您知道我在说什么. 无论如何,我想知道是否有人可以阐明人们如何设计这种系统以及需要什么样的东西,以及我应该注意什么? 我最初的想法是将系统与执行特定任务的每个连接(在其自己的端口上)分开的客户/服务器连接,例如更新播放器/怪物位置,发送和接收聊天消息等我会使数据更轻松,因为您并不总是需要将标题放在数据上以了解数据包包含哪些信息. 这是有意义的,而且很有用,还是我只是让事情复杂化? 您的回答非常感谢. 解决方案 如果您正在执行套接字级别的编程,那么无论您为每种消息类型打开多少端口,您仍然需要具有某种标题.即使只是消息的其余部分.话虽如此,很容易在消息中添加简单的标头和尾巴结构.我认为只需要处理客户端的一个端口会更容易. 我相
0 2024-04-12
编程技术问答社区
我如何在C#中获得服务器和客户端之间的延迟?
我正在为我在ActionScript 3中编写的游戏引擎进行C#服务器应用程序.我正在使用权威服务器模型来防止作弊并确保公平的游戏.到目前为止,一切都很好: 当客户端开始移动时,它会告诉服务器并在本地开始渲染;然后,服务器告诉其他所有人,客户X已经开始移动,其中包括细节,因此它们也可以开始渲染.当客户端停止移动时,它告诉服务器,服务器根据客户端开始移动的时间执行计算,并且客户端渲染tick延迟并回复所有人,以便他们可以使用正确的值进行更新. 问题是,当我在服务器计算上使用默认的20ms tick延迟时,当客户端移动距离很长时,停止时就会有一个明显的倾斜度.如果我将延迟略微增加到22ms,那么在本地网络上,一切都非常顺利,但是在其他位置,倾斜仍在那里.进行了一些实验后,我注意到所需的额外延迟与客户端和服务器之间的延迟几乎息息相关.我什至将其煮沸到一个很好地工作的公式:延迟= 20 +(延迟/10). 因此,我将如何获取某个客户端和服务器之间的延迟(我正在使用异步插座).
0 2024-04-11
编程技术问答社区
如何创建一个为每个客户创建一个新线程的服务器?
我需要创建一台服务器,该服务器为尝试连接到服务器的每个客户端创建一个新线程.为每个客户端创建的新线程管理客户端和服务器进程从端口聆听新连接. 我需要在UnixC中进行编码.这是我需要尽快完成任务的子任务.我是这个领域的新手,因此对创建服务器并不了解. 解决方案 基本上,您要寻找的是这样的东西: #include #include #include void* handle_connection(void *arg) { int client_sock = *(int*)arg; /* handle the connection using the socket... */ } int main(void) { /* do the necessary setup, i.e. bind() and listen()... */ int client_soc
0 2024-04-10
编程技术问答社区
Python和C语言的服务器和客户端
我已经在Python中编写了一个简单的客户端代码,我正在尝试连接到用C. 编写的简单回声服务器 我知道这没关系,但是由于某种原因,我确实设法连接到用Python编写的服务器,但是我无法连接到C服务器. 这是客户端的代码: import socket import sys import time HOST = 'localhost' PORT = 11000 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT)) msg = raw_input() s.send(msg) data = s.recv(len(msg)) s.close() print 'Received: ', data 这是Echo服务器的C代码: #include #include #include
0 2024-04-10
编程技术问答社区
FIFO服务器程序
我在linux中输入的上述程序.它基本上必须在单独的终端连接客户端和服务器.但是,当我以正确的顺序运行它们时,即 编译服务器 - >运行服务器 编译客户端 - >运行客户端 终端只是什么都不做.它甚至没有打印第一个printf语句的"Trying to connect"部分.这里有什么错误? 编辑 我检查了mkfifo的返回值,正如@parapura Rajkumar所说.但是它仍然保持不变.这是我更改的服务器代码. if(mkfifo("fifo1",0666)
2 2024-04-10
编程技术问答社区
套接字通信的Connect()功能
关于插座通信壁挂时间的问题. 我有一个函数,该功能在中央服务器上找到了注册的服务器. 我通过提取服务器的URL和端口号,并试图通过像简单的TCP客户端进行连接来添加一层网络检查该功能. 如果返回值大于0,则意味着网络工作正常.如果-1,则网络被打破. printf("--Checking for network connectivity--\n"); for(size_t i = 0; i discoveryUrl.length+1); memcpy(A[i],server->discoveryUrl.data,server->discoveryUrl.length);
0 2024-04-09
编程技术问答社区
在从客户端发送任何信息之前,无法从服务器端向客户端打印信息
我有两个用于服务器和客户端的程序.我的服务器可以连接到多个客户端.但是我现在面临的问题是,我想从服务器端到客户端显示一些消息,但我无法做到这一点.服务器和客户端程序均提供下面.我认为阻碍我在客户端打印消息的语法是scanf,它使用的是客户端代码(while循环的第二行).我没有为如何在客户端连接时从服务器端显示两条消息的任何解决方案. 问题1: 客户端连接时我想在客户端显示的服务器端消息:(可以在new_connection_handler函数中找到) message = "This is connection handler\n"; message = "Type something \n"; 问题2: 为什么我需要在客户端使用sleep (2)?如果我不使用sleep (2),那么我将无法接收客户端的客户端发送的数据.数据显示了我第二次从客户端发送某些东西时. 问题3: 是否可以一起编写客户端和服务器代码,并使用命令行参数编译和运行它? 服
0 2024-04-09
编程技术问答社区
在C语言中使用select()函数进行客户对客户的通信
我试图实现客户端与服务器之间的客户端通信.服务器的功能是,当客户端假设客户端A将消息发送到服务器时,服务器应将该消息转发给其他客户端B.相同的方式.当客户端B向服务器发送消息时,应将其转发给服务器.对客户A.该程序仅涉及两个客户. 执行代码时我遇到的错误是: Socket Operation on Non-socket 当从客户端A转发给客户端B时,我会收到此错误.我认为问题是由于将客户端B的地址存储到客户端A的地址A所致.我不确定这一点. 到目前为止,我的服务器代码. #include #include #include #include #include #include #include #include #include #include
0 2024-04-09
编程技术问答社区
对于一个客户服务器程序来说,什么是平行接收多个客户连接请求的最佳方法?
该程序是通过Linux上C开发的客户端服务器套接字应用程序.每个客户端都在线连接并记录自己的远程服务器.在任何给定时间点,很可能会在线上有几个客户,所有这些都试图连接到服务器以在线/忙/空闲等登录自己.因此,服务器如何处理这些并发请求.什么是一种好的设计方法(也许每个连接请求分叉/多线程?)? 解决方案 我个人将使用事件驱动的方法进行服务器.在那里,您会在连接到达后立即注册一个回调.每当插座准备读取或写入时,事件回调. 通过大量连接,与线程相比,您将具有出色的性能和资源优势.但是我也将其预先使用连接的杂音计数. 我只有在您确实需要使用多个内核的情况下才会使用线程,或者有一些可能需要更长的处理以及在没有线程的情况下处理的请求. 太复杂了. 我使用 libev 作为基础库来处理事件驱动网络. > 其他解决方案 一般而言,您需要一个线程池来服务请求. 典型的结构将以单个线程为开始,该线程除了排队来源的请求外什么都不做.由于它做得不多,因此一个线程通常很容
0 2024-04-09
编程技术问答社区
对于一个客户服务器程序来说,什么是平行接收多个客户连接请求的最佳方法?
该程序是通过Linux上C开发的客户端服务器套接字应用程序.每个客户端都在线连接并记录自己的远程服务器.在任何给定时间点,很可能会在线上有几个客户,所有这些都试图连接到服务器以在线/忙/空闲等登录自己.因此,服务器如何处理这些并发请求.什么是一种好的设计方法(也许每个连接请求分叉/多线程?)? 解决方案 我个人将使用事件驱动的方法进行服务器.在那里,您会在连接到达后立即注册一个回调.每当插座准备读取或写入时,事件回调. 通过大量连接,与线程相比,您将具有出色的性能和资源优势.但是我也将其预先使用连接的杂音计数. 我只有在您确实需要使用多个内核的情况下才会使用线程,或者有一些可能需要更长的处理以及在没有线程的情况下处理的请求. 太复杂了. 我使用 libev 作为基础库来处理事件驱动网络. > 其他解决方案 一般而言,您需要一个线程池来服务请求. 典型的结构将以单个线程为开始,该线程除了排队来源的请求外什么都不做.由于它做得不多,因此一个线程通常很容
0 2024-04-09
编程技术问答社区
C套接字:为什么我的服务器在最后追加了额外的字符?
我在C中编写一个简单的服务器/客户端套接字.客户端要求用户输入消息,并且服务器通过重复相同来响应.问题是当我从客户端发送消息时,服务器通过附加额外的字符回复.我该如何解决此问题. 这是我的客户端代码 while(1) { bzero(buffer, BUFSIZE); printf("Enter Message: "); scanf("%s", buffer); //send some data if(send(socket_fd, buffer, strlen(buffer), 0)
0 2024-04-09
编程技术问答社区