积极答复者
HttpWebRequest.GetRequestStream()报错:{无法访问远程服务器}

问题
-
问题描述:
在本机上可以收发数据,但是在局域网的两台办公电脑间访问出错,{无法访问远程服务器};
ps:防火墙已直接关闭,netsh http add urlacl url=http://xx.xx.xx.xx:23456/ user=everyone;
使用telnet时 只能成功获取目标服务器80端口的信息,其他端口全部超时失败。
感谢您的任何关注与建议。
服务器端:
执行
Thread clienttest = new Thread(client); clienttest.Start(); static void server() { HttpServerHelper.getInstance().Start("10.204.75.36", 23456); }
源码:
namespace CodeTestByMainMethod { class HttpServerHelper: IDisposable { private readonly HttpListener _listener;//监听 private readonly Thread _listenerThread; private readonly Thread[] _workers;//工作线程组 private readonly ManualResetEvent _stop, _ready; private Queue<HttpListenerContext> _queue;//消息队列 private static HttpServerHelper instance; private static object _lock = new object(); public static HttpServerHelper getInstance() { if (instance == null) { lock (_lock) { if (instance == null) { instance = new HttpServerHelper(10); } } } return instance; } private HttpServerHelper(int maxThreads)//初始化确定最大线程数 { _workers = new Thread[maxThreads]; _queue = new Queue<HttpListenerContext>(); _stop = new ManualResetEvent(false); _ready = new ManualResetEvent(false); _listener = new HttpListener(); _listenerThread = new Thread(HandleRequests);//C#中用函数做参数初始化线程 } public void Start(String ip,int port) { //_listener.Prefixes.Add(String.Format(@"http://+:{0}/", port));//添加监听的地址,可以是string[] _listener.Prefixes.Add("http://"+ip+":"+port+"/");//添加监听的地址,可以是string[] _listener.Start(); _listenerThread.Start(); for (int i = 0; i < _workers.Length; i++) { _workers[i] = new Thread(Worker); _workers[i].Start(); } } public void Dispose() { Stop(); } public void Stop()//这里是关闭线程,Join方法比较迷 { _stop.Set(); _listenerThread.Join(); foreach (Thread worker in _workers) worker.Join(); _listener.Stop(); } private void HandleRequests() { while (_listener.IsListening) { var context = _listener.BeginGetContext(ContextReady, null); if (0 == WaitHandle.WaitAny(new[] { _stop, context.AsyncWaitHandle }))//跳出监听 return; } } private void ContextReady(IAsyncResult ar) { try { lock (_queue) { _queue.Enqueue(_listener.EndGetContext(ar)); _ready.Set();//通知workers } } catch { return; } } private void Worker() { } }
client端收发内容:
具体内容Thread clienttest = new Thread(client); clienttest.Start(); static void client() { HttpClientHelper myhelper = new HttpClientHelper();
myhelper.HttpPost("http://10.204.75.36:23456/", "");
}
public string HttpPost(string Url, string postDataStr) { _clientCounter += 1; var tmpClientCount = _clientCounter; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; //request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr); //request.CookieContainer = cookie; Stream myRequestStream = request.GetRequestStream(); }
TFS C#开发不动人员 这个职业不广泛