Tag: 套接字

使用BeginXXX重写套接字和流代码到XXXAsync

我正在尝试将使用AsyncCallbacks的BeginXXX方法重写为使用async / await和XXXAsync方法的应用程序。 但是我在性能方面遇到了一些麻烦。 例如,这里是原始代码的片段,用于初始化一堆连接: … for (int i = 1; i <= _maxTcpClients; i++) { TcpClientState tt = new TcpClientState(new TcpClient(), i); try { tt.TcpClient.BeginConnect(Host, Port, ConnectCallback, tt); } catch (Exception ex) { Log.Debug( "Error on BeginConnect on RequestHandler (" + tt.HandlerId + ") request (" + tt.RequestId + ")", ex); CloseRequest(tt); } } […]

UWP应用程序不从localhost上的.NET桌面应用程序接收UDP数据报

我一直在尝试在作为客户端的UWP应用程序和作为服务器的.NET桌面应用程序之间设置客户端服务器。 我正在使用UDP Datagrams作为两者之间的消息传递系统。 这是我的UWP代码,用于在端口22222上侦听localhost IP上的Datagrams: 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 + ” ” + socketListener.Information.LocalPort); } private async void MessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args) { // Interpret the incoming datagram’s entire contents as a string. uint stringLength = […]

如何从Socket获取IP地址

我想获得一个绑定到receiveSock的IP地址。 我怎么才能得到它。 问题1: ipEndReceive = new IPEndPoint(IPAddress.Any, receivePort); receiveSock = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp); receiveSock.Bind(ipEndReceive); 当代码达到Bindfunction时。 发生错误 无效参数,错误代码:10022,消息:提供了无效参数 问题2: ipEndReceive = new IPEndPoint(IPAddress.Parse(“127.0.0.1”), receivePort); receiveSock = new Socket(AddressFamily.InterNetwork , SocketType.Stream, ProtocolType.Tcp); receiveSock.Bind(ipEndReceive); ErrorLog.WritetoErrorlog(“\nRemote IP Address : ” + ((IPEndPoint)receiveSock.RemoteEndPoint).Address.ToString() 当我尝试这个IP。 它向我显示了与上面相同的错误

使用Android作为客户端和C#作为服务器的TCP / IP通信

我想从我的Android设备发送几个陀螺仪读数到PC程序(C#)。 我决定通过套接字编程来实现。 Android手机充当客户端,程序在充当服务器的计算机上运行。 这是我的android代码,现在发送“hello”: try { socket = new Socket(“192.168.1.3”, 1071); PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))); pw.println(“Hello”); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } 现在c#服务器代码如下所示: listener = new TcpListener(1071); listener.Start(); Socket soc; while (true) { soc= listener.AcceptSocket(); Console.WriteLine(“Connection […]

是否有适用于ASP.NET MVC应用程序的开源彗星Web服务器?

我正在寻找一个可以用来处理许多长轮询客户端的东西,而不是为每个请求创建一个线程。

Process.Start没有创建子进程(端口句柄inheritance)?

我在使用TCP绑定的自托管应用程序中有一个WCF服务。 如果我从应用程序启动外部进程“commandLineApp”,即使在我的应用程序关闭后仍然继续,我的应用程序下次启动WCF服务时会遇到问题。 WCF说地址/端口已经在使用中。 如果在重新启动应用程序之前关闭外部应用程序(根本不使用WCF或任何套接字),WCF服务就可以正常启动。 看起来我的应用程序中的套接字句柄以某种方式由新进程“commandLineApp”inheritance,并且在该进程退出之前不会被释放。 如何阻止其他进程从我的主应用程序inheritance句柄(或成为子进程?)? 目前我正在使用Process.Start启动其他进程,使用UseShellExecute设置为False,因为我需要设置EnvironmentVarables和RedirectStandardOutput / Error。 我认为如果我设置UseShellExecute = true,则会阻止子进程设置,但是我没有得到我需要的所有function。 有没有解决这个问题的方法? 请参阅下面的示例代码 ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = “commandLineApp.exe”; psi.Arguments = “/someParameter”; psi.EnvironmentVariables.Add(“…”, “…”); psi.RedirectStandardOutput = true; psi.RedirectStandardError = true; psi.UseShellExecute = false; Process process = new Process(); process.StartInfo = psi; process.Start(); // Monitor if process with PID = process.Id is running […]

在C#中编写“原始”HTTP客户端

我正在尝试用C#编写一个“原始”HTTP客户端。 你可能会问为什么? 我的目标是在J2ME中实现HTTP客户端(它只能执行GET和有限的POST),但首先我需要更好地理解HTTP协议(因此C#尝试)。 我的第一次尝试失败了: var requestBytes = Encoding.UTF8.GetBytes(@”GET / HTTP/1.1 User-Agent: CSharp Host: www.google.com “); var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(“www.google.com”, 80); socket.Send(requestBytes); var responseBytes = new byte[socket.ReceiveBufferSize]; socket.Receive(responseBytes); Console.Out.Write(Encoding.UTF8.GetString(responseBytes)); 套接字打开,但随后在接收呼叫时阻塞。 几秒钟后,远程主机关闭连接。 有任何想法吗? 当我尝试使用puTTY中的RAW模式进行连接时,会发生同样的情况。

套接字接收

我试图在c#中捕获ip数据包。 一切都运行正常,除了我只得到传出的数据包。 我的代码: using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)) { sock.Bind(new IPEndPoint(MYADDRESS, 0)); sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true); sock.IOControl(IOControlCode.ReceiveAll, BitConverter.GetBytes(1), null); while (true) { byte[] buffer = new byte[sock.ReceiveBufferSize]; int count = sock.Receive(buffer); // … } } 问题绝对是我的电脑! 但也许有一个解决方法……

Socket.Bind和Connect使用本地地址

为了测试我的服务器/客户端应用程序,其中每个客户端的IP地址是已知的,我创建了几个网络适配器(请参阅如何在.NET中创建虚拟网络适配器? )。 192.168.0.10和11现在都对应于本地以太网适配器(10是“真正的”,11是环回适配器)。 客户端可以Connect自身Connect到服务器,只要它不将其套接字Bind到特定地址即可。 但如果是这样,服务器没有注意到任何东西,并且客户端发生超时(我想使用Bind ,出于安全原因,服务器通过查看远程端点的IP地址来自动检测哪个客户端正在连接自己。新的连接:如果服务器不知道IP地址,服务器将立即断开连接 – 以前我使用的是多个虚拟机,但是它使用了更多的RAM并且使用起来不太实用。 这是我服务器中的代码,例如在192.168.0.10:1234上收听 IPEndPoint myEP = new IPEndPoint(myAddress, myPort); Socket listeningSocket = new Socket(myAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); listeningSocket.Bind(myEP); listeningSocket.Listen(50); Socket acceptedSocket = listeningSocket.Accept(); 这是我的客户端中的代码,例如绑定到192.168.0.11(任何端口)并连接到192.168.0.10:1234 Socket socket = new Socket(svrAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); socket.Bind(new IPEndPoint(myAddress, 0)); // Bind to local address using automatic port socket.Connect(new IPEndPoint(svrAddress, svrPort)); // Works fine without Bind, […]

网络服务发现

我正在寻找为Android(客户端)和服务器(Windows)制作客户端/服务器应用程序。 该应用程序的目的是从服务器(PC),它允许用户扫描网络以查找与我的C#应用​​程序兼容的设备,然后可以向客户端和服务器发送消息。 我一直在阅读Android文档,并在http://developer.android.com/training/connect-devices-wirelessly/nsd.html上找到了android中的网络发现服务。 我对它的工作原理的理解是,android应用程序发送一个广播消息,其中包含其他设备可以通过它连接的服务名称,IP和端口号。 因此,在我的情况下,C#将接收此广播消息并决定该服务是否是我的C#应用​​程序可以支持的内容,如果是,则建立与Android设备的套接字连接以及来自广播的详细信息。 正如我所说,我已经找到了用于注册服务的android开发人员教程,但是我找不到任何关于C#如何找到这个广播消息并采取行动的方法。 你可能拥有的任何帮助或教程都会很棒,因为Google没有找到任何东西,我不完全确定我是否正在寻找正确的东西。 谢谢