问题在C#插座 [英] Problem with sockets in C#

查看:117
本文介绍了问题在C#插座的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  Socket套接字=新的Socket(ipe.AddressFamily,SocketType.Stream,ProtocolType.Tcp); 
...
socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,1000);
...
socket.Send(bytesSent,bytesSent.Length,0);
...
字节= socket.Receive(与BytesReceived,bytesReceived.Length,0);



插座后已发送的数据,服务器没有响应,使程序等待响应。如何停止在1000毫秒接收数据? Ы


解决方案

  Socket套接字=新的Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType .Tcp); 
socket.RecieveTimeout = 1000;
socket.SendTimeout = 1000; //不是需要


// socket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,1000);

ip地址ip地址= IPAddress.Parse(192.168.2.2);
INT端口= 9000;


{
//可能需要15 - 30秒超时,不使用线程,有
//似乎是没有办法改变这个
socket.Connect(ip地址,端口);

//由于发送超时这个现在将第二个
socket.Send后超时(bytesSent,bytesSent.Length,0);

//这应该现在第二个
字节= socket.Receive后超时(与BytesReceived,bytesReceived.Length,0);
}
终于
{
socket.Close();
}


Socket socket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
...
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);
...
socket.Send(bytesSent, bytesSent.Length, 0);
...
bytes = socket.Receive(bytesReceived, bytesReceived.Length, 0);

After socket has sent the data, server does not respond so that program waits for response. How to stop receiving data after 1000 miliseconds? Ы

解决方案

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.RecieveTimeout = 1000;
socket.SendTimeout = 1000;

// Not needed
// socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);

IPAddress ipAddress = IPAddress.Parse("192.168.2.2");
int port = 9000;

try
{
    // could take 15 - 30 seconds to timeout, without using threading, there
    // seems to be no way to change this
    socket.Connect(ipAddress, port);

    // Thanks to send timeout this will now timeout after a second
    socket.Send(bytesSent, bytesSent.Length, 0);

    // This should now timeout after a second
    bytes = socket.Receive(bytesReceived, bytesReceived.Length, 0);
}
finally
{
    socket.Close();
}

这篇关于问题在C#插座的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆