【发布时间】:2018-11-06 11:07:00
【问题描述】:
我使用下面的代码尝试创建一个文件到 ftp 服务器。但是我得到一个套接字异常。谁能帮我解决这个异常?当我使用 UploadFile(uri, filepath) 函数时,似乎也会发生同样的问题。
我也尝试在 WebClient 的选项中将凭据设置为 NetworkCredentials,但得到了相同的结果。
在远程 ftp 服务器上也得到了相同的结果。
我正在使用 .NET 4.7.1
byte[] xmlBytes = XmlDocumentToByteArray(xml);
WebClient webclient = new WebClient() {
Proxy = null
};
Uri uri = new Uri("ftp://test:test@localhost/test.xml");
//Uri uri = new Uri("ftp://localhost/test.xml");
webclient.UploadData(uri, xmlBytes);
例外: (英文:提供了一个无效的参数)
System.Net.WebException: Er is een ongeldig argument opgegeven ---> System.Net.Sockets.SocketException: Er is een ongeldig argument opgegeven
bij System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
bij System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
bij System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
bij System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
bij System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
bij System.Net.FtpWebRequest.QueueOrCreateConnection()
bij System.Net.FtpWebRequest.SubmitRequest(Boolean async)
--- Einde van intern uitzonderingsstackpad ---
bij System.Net.WebClient.UploadDataInternal(Uri address, String method, Byte[] data, WebRequest& request)
bij System.Net.WebClient.UploadData(Uri address, String method, Byte[] data)
bij System.Net.WebClient.UploadData(Uri address, Byte[] data)
bij ProbeOrderPlacement.Order.OrderSubmit.SubmitOrder(XmlDocument xml) in H:\VSWorkspace\VSTS\Quantore\Probe\ProbeOrderPlacement\Order\OrderPlacement.cs:regel 28
也尝试了以下代码,但它引发了相同的异常(但在.GetRequestStream())
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri("ftp://127.0.0.1/test.xml"));
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Proxy = null;
request.UseBinary = true;
request.Credentials = new NetworkCredential("test", "test");
request.ContentLength = xmlBytes.Length;
//Upload the data
using(Stream requestStream = request.GetRequestStream()) {
requestStream.Write(xmlBytes, 0, xmlBytes.Length);
}
例外: (英文:提供了一个无效的参数)
System.Net.WebException: Er is een ongeldig argument opgegeven ---> System.Net.Sockets.SocketException: Er is een ongeldig argument opgegeven
bij System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
bij System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
bij System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
bij System.Net.PooledStream.Activate(Object owningObject, GeneralAsyncDelegate asyncCallback)
bij System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
bij System.Net.FtpWebRequest.QueueOrCreateConnection()
bij System.Net.FtpWebRequest.SubmitRequest(Boolean async)
--- Einde van intern uitzonderingsstackpad ---
bij System.Net.FtpWebRequest.GetRequestStream()
bij ProbeOrderPlacement.Order.OrderSubmit.SubmitOrder(XmlDocument xml)
【问题讨论】:
-
@mjwills 提供的参数无效。也更新了我的问题。
-
如果您希望人们提供帮助,请发布实际代码和相应的完整异常。
-
这是一个非常低级的事故,与您传递的参数无关,因为它们直到以后才被使用。底层 OS 功能 (WSASocket) 失败,似乎对创建 TCP 套接字不满意。这当然不应该发生。但是网络代码会发生垃圾,总是有太多的垃圾挂在一个声称可以保证你的机器安全和平稳运行的套接字上。首先禁用已安装的反恶意软件产品,然后禁用任何类型的防火墙等等。
-
在不知道导致此事故的实际恶意软件的情况下,我无法正确回答这个问题。这样的细节对未来的受害者来说非常重要。请创建您自己的帖子以分享您的发现并将其标记为答案。
-
@HansPassant 我明白这一点。回答了我自己的问题,但很想将赏金分配给您。如果您提供任何类型的答案,我会这样做。