Tag: 套接字

UDP具有多个发送方和一个单一接收方

在一个项目中,我有多个UDP数据发送者,但只有一个接收者。 如果流量变高,接收方“忘记”大量数据包。 我知道这是UDP固有的问题,但我想减少丢失数据包的数量。 我以前读过这个问题! 这是我的代码(请原谅大量的代码块,但我希望这个例子是自包含的) 发件人方: public class UdpSender { private static int portNumber = 15000; public void Send(string data) { var udpServer = new UdpClient(); var ipEndPoint = new IPEndPoint(IPAddress.Broadcast, portNumber); byte[] bytes = Encoding.ASCII.GetBytes(data); udpServer.Send(bytes, bytes.Length, ipEndPoint); udpServer.Close(); } } class Program { static void Main(string[] args) { var sender = new UdpSender(); […]

如何检查我是否已连接?

ALL,我正在编写一个需要与服务器进行异步阻塞连接的应用程序。 我有一个带有按钮的GUI表单和一个与BeginConnect / EndConnect对执行连接的类。 该实现遵循此 MSDN示例。 但是,在回调方法中抛出了exception。这就是我要避免的。 我想要的是检查是否已建立连接,以及它是否在GUI表单上将相应的错误吐出为文本。 我试图检查BeginConnect()的返回值,但它在调用静态方法之前返回。 我尝试重新抛出exception并在建立连接(按钮单击事件)时捕获它,但它不起作用。 没有抓住例外。 如何检查是否已建立连接? 我可以将我的文本控件传递给连接类,并在捕获exception时将文本设置为错误,但还有其他方法吗? 谢谢。 [编辑] class InternetConnector { public void ConnectToHost() { IPEndPoint ip = new IPEndPoint(IPAddress.Parse(connector_host), connector_port); client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Blocking = true; client.BeginConnect(ip, new AsyncCallback(ConnectCallback), client); } private static void ConnectCallback(IAsyncResult ar) { try { Socket sock = (Socket)ar.AsyncState; sock.EndConnect(ar); […]

如何在发送到服务器时加密我的消息? 可以为我添加一些代码,因为我不熟悉加密?/任何帮助?

我想从客户端发送到服务器时加密我的消息,我该怎么办? 客户 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Threading; namespace SocketClient { public partial class SocketClient : Form { System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient(); NetworkStream serverStream = default(NetworkStream); string readData = null; public SocketClient() { InitializeComponent(); } private void getMessage() { while […]

c#通过socket发送图像和posibble一样快

你好我们试图尽可能快地发送套接字试图压缩… comapre图像…它仍然工作很慢…顺便说一下我试图在压缩之前和之后保存图像和大小是相同的…. 1或2 kb les … 看看客户端代码: Bitmap pre; private void Form2_Load(object sender, EventArgs e) { pre = GetDesktopImage(); prev = Compress(ImageToByte(pre)).Length; theThread = new Thread(new ThreadStart(startSend)); theThread.Start(); } Bitmap curr; byte[] compressed; private void startSend() { sck = client.Client; s = new NetworkStream(sck); while (true) { curr = GetDesktopImage(); compressed = Compress(ImageToByte(curr)); if (Math.Abs(compressed.Length […]

即使数据可用,从端口读取信息也会等待

我在向套接字发送信息并收到响应时遇到问题。 我有一个正确执行的演示程序,所以我知道它不是另一端客户端的问题。 发送requestData并且客户端正常运行并响应,但我的代码永远不会退出读取响应中的循环。 在我倾听之前,客户能否做出回应? 如何确保我不会错过传入的消息? networkStream = tcpClient.GetStream(); StreamWriter clientStreamWriter = new StreamWriter(); clientStreamWriter.WriteLine(requestData); clientStreamWriter.Flush(); // Continuously read data on the socket and if it is more than just a ping, read the response. StringBuilder sbReadBuffer = new StringBuilder(); while (true) { String response = readresponse(timeoutOn30Seconds); if (response.Length > 1 && (!response.Contains(“\r\n”) || response.Contains(“,”))) { […]

.net中的高性能TCP客户端

在SO上看到的很多关于.Net套接字的好post都是围绕编写可扩展的高性能服务器。 C#中的高性能TCP服务器 如何编写可扩展的基于Tcp / Ip的服务器 虽然这些post非常好,但在编写高性能TCP客户端应用程序时需要关注的核心内容是什么? 高性能客户端的方案是将请求流式传输到服务器并以非阻塞方式处理响应的应用程序。 这样的客户端还应该有可靠的断开检测策略。 为了进一步澄清,我们无法控制服务器端。 我们只需要一个服务器端点即可连接。 注释中提到的zmqNet是一个很棒的库,但我认为它最强(或意味着案例)连接的两端都使用zmq(true?)。

套接字术语 – “阻塞”是什么意思?

在C#中讨论套接字编程时,阻塞这个术语是什么意思? 我需要构建一个服务器组件(可能是一个Windows服务),它将接收数据,进行一些处理并将数据返回给调用者。 呼叫者可以等待回复,但我需要确保多个客户端可以同时呼叫。 如果客户端1连接并且我说10秒钟来处理他们的请求,那么套接字是否会在2秒后阻止客户端2呼叫? 或者服务是否会在另一个线程上开始处理第二个请求? 总之,我的客户可以等待响应,但我必须能够同时处理多个请求。

C#32feet.Net:在单独的线程中处理两个蓝牙连接,给出SocketException

我正在使用32feet.Net库编写C#控制台应用程序,该库创建两个线程来搜索并连接到不同的蓝牙设备,然后打开TCP套接字,以便可以通过网络连接将数据传递给设备。 我知道这种情况听起来很奇怪,但我被一位资深同事要求这样做。 我的代码似乎只在连接了一个设备时工作正常,尽管在向后和向前传递几条消息后,蓝牙连接有时会丢失。 但是,有时一旦第二个设备连接,我就会收到一个错误,说System.net.sockets.socketexception a connection attempt failed because the connected party did not properly respond ,有时代码只是退出而没有抛出任何exception。 我想知道造成这种情况的原因,我已经看到32feet.Net库可以支持多个连接。 我想知道我是否犯了一些错误,因为我是C# .Net ,甚至是Windows的新手,以前从未编写任何基于蓝牙的代码。 Program.cs中: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; namespace BluetoothManager { class Program { static void Main(string[] args) { BTManager rover_btm = new BTManager(); BTManager base_btm = new BTManager(); base_btm.Port = […]

CLR集成中的套接字通信

套接字通信在CLR集成中是否表现良好。 例如:我在CLR Integration中创建了一个PROC。它从表中获取所有数据,并且只想将数据发送到TCP服务器。 命令: CREATE ASSEMBLY TcpClr FROM ‘G:\TcpClrTest.dll’ WITH PERMISSION_SET = EXTERNAL_ACCESS GO CREATE PROCEDURE SendDataToSrv ( @NAME nvarchar(20) ) AS EXTERNAL NAME TcpClr.[TcpClrTest.TcpSend].SqlProce; GO EXEC SendDataToSrv ‘cdc.dbo_Test_CT’ TcpClrTest.dll中的一些代码: using (SqlCommand cmd = new SqlCommand(“SELECT * FROM tableName”, con)) { using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { //string value = reader[0].ToString(); //tcpClient.Write(value); […]

我的sockets可以使用哪个端口?

你好我是初学者,我想知道如何决定哪个端口可用于我的套接字? 谢谢。