WebSocket Failed error, in a vue-cli project - php

I have a VUE CLI web application, with router, runs on port 8080 (localhost:8080)
Also, I have a PHP MVC Project, with another router, runs on port 8888 (localhost:8888)
VUE CLI is my front-end part, that should have many connections to my PHP MVC, using AJAX (I can use fetch or jQuery.ajax or WebSocket protocol)
But automatically AND when I make a new WebSocket connection, I get these errors:
(192.168.1.1 is myself, on network)
In this image, first error occurs automatically many times (I think that defined in VUE CLI)
And second error occurs when I make a new WebSocket connection to my back-end server (PHP MVC):
win.mySocket = new win.WebSocket('ws://localhost:8888/login');
win.mySocket.addEventListener('message', e => {
win.console.log('Message from server ', e.data);
})
win.mySocket.addEventListener('error', e => {
win.console.log('Error from server ', e);
})
(win is same as window, defined in data(){} method in script tag of this router view)
Note: I've Solved the CORS-ORIGIN problem, so this isn't the problem:
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Origin: *');

Related

Fatal error: Uncaught mysqli_sql_exception: No connection could be made because the target machine actively refused [duplicate]

I'm using the WCF4.0 template -REST. I'm trying to make a method that uploads a file using a stream.
The problem always occur at
Stream serverStream = request.GetRequestStream();
Class for streaming:
namespace LogicClass
{
public class StreamClass : IStreamClass
{
public bool UploadFile(string filename, Stream fileStream)
{
try
{
FileStream fileToupload = new FileStream(filename, FileMode.Create);
byte[] bytearray = new byte[10000];
int bytesRead, totalBytesRead = 0;
do
{
bytesRead = fileStream.Read(bytearray, 0, bytearray.Length);
totalBytesRead += bytesRead;
} while (bytesRead > 0);
fileToupload.Write(bytearray, 0, bytearray.Length);
fileToupload.Close();
fileToupload.Dispose();
}
catch (Exception ex) { throw new Exception(ex.Message); }
return true;
}
}
}
REST project:
[WebInvoke(UriTemplate = "AddStream/{filename}", Method = "POST", BodyStyle = WebMessageBodyStyle.Bare)]
public bool AddStream(string filename, System.IO.Stream fileStream)
{
LogicClass.FileComponent rest = new LogicClass.FileComponent();
return rest.AddStream(filename, fileStream);
}
Windows Form project: for testing
private void button24_Click(object sender, EventArgs e)
{
byte[] fileStream;
using (FileStream fs = new FileStream("E:\\stream.txt", FileMode.Open, FileAccess.Read, FileShare.Read))
{
fileStream = new byte[fs.Length];
fs.Read(fileStream, 0, (int)fs.Length);
fs.Close();
fs.Dispose();
}
string baseAddress = "http://localhost:3446/File/AddStream/stream.txt";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(baseAddress);
request.Method = "POST";
request.ContentType = "text/plain";
Stream serverStream = request.GetRequestStream();
serverStream.Write(fileStream, 0, fileStream.Length);
serverStream.Close();
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
int statusCode = (int)response.StatusCode;
StreamReader reader = new StreamReader(response.GetResponseStream());
}
}
I've turned off the firewall and my Internet connection, but the error still exists. Is there a better way of testing the uploading method?
Stack trace:
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception)
"Actively refused it" means that the host sent a reset instead of an ack when you tried to connect. It is therefore not a problem in your code. Either there is a firewall blocking the connection or the process that is hosting the service is not listening on that port. This may be because it is not running at all or because it is listening on a different port.
Once you start the process hosting your service, try netstat -anb (requires admin privileges) to verify that it is running and listening on the expected port.
update: On Linux you may need to do netstat -anp instead.
You don't have to restart the PC. Restart IIS instead.
Run -> 'cmd'(as admin) and type "iisreset"
You must set up your system proxy
You have to go through this path
controlpanel>>internet option>>connnection>>LAN settings>>
proxy
no tik:use proxy server
I got a similar error message like TCP error code 10061: No connection could be made because the target machine actively refused it in my current project. I find this 10061 error code cannot distinguish the case that the service endpoint is not started and the case that it is blocked by the firewall. Often, the firewall can be switched off, but the problem is still there.
You can test your code in the below two ways.
Insert code to get time A that service is started and time B that client sends the request to the server. If B is earlier than A, it can cause this problem.
Change your server port to another port that is also available in the system. You will find the same error code reported.
Above is my fix. It works on my machine. I hope it helps!
Check if any other program is using that port.
If an instance of the same program is still active, kill that process.
I had a similar issue. In my case the service would work fine on the developer machine but fail when on a QA machine. It turned out that on the QA machine the application wasn't being run as an administrator and didn't have permission to register the endpoint:
HTTP could not register URL http://+:12345/Foo.svc/]. Your process does
not have access rights to this namespace (see
http://go.microsoft.com/fwlink/?LinkId=70353 for details).
Refer here for how to get it working without being an admin user: https://stackoverflow.com/a/885765/38258
If you use WCF storm, can you even log-in to the WCF service endpoint? If not, and you are hosting it in a Windows service, you probably forgot to register that namespace. It's not very well advertised that this step is required, and it is actually annoying to do.
I use this tool to do this; it automates all those cumbersome steps.
Check whether the port number in file Web.config of your webpage is the same as the one that is hosted on IIS.
I had the same problem on my web server "No connection could be made because the target machine actively refused it 161.x.x.235:5672". I asked the Admin to open the port 5672 on the web server, then it worked fine.
I had a similar problem
rejecting localhost and 127.0.0.1.
cmd(admin) netstat -anb found the port running on 169.254.80.80 (dont know were that ip came from because my network ip was 10.0.0.5.
after putting in this IP it worked.
This Gives correct IP:
IPAddress ipAddress = ipHostInfo.AddressList[0];
Console.WriteLine(ipAddress.ToString());
I also faced problem in .Net Remoting Service in C#.
I got it solved in 3 steps:
Change Port of Protocol in all the files whereever it is being used.
Run your Host Server Program and make it active.
Now run your client program.
I could not restart IIexpress. This is the solution that worked for me
Cleaned the build
Rebuild
With this error I was able to trace it, thanks to #Yaur, you need to basically check the service (WCF) if it's running and also check the outbound and inbound TCP properties on your advance firewall settings.
With similar pattern, my rest client is calling the service API, the service called successfully when debugging, but not working on the published code. Error was: Unable to connect to the remote server.
Inner Exception: System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it serviceIP:443 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
Resolution: Set the proxy in Web config.
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="http://proxy_ip:portno/" usesystemdefault="True"/>
</defaultProxy>
</system.net>
I had a similar issue. In my case VPN proxy app such as Psiphon ، changed the proxy setup in windows so follow this :
in Windows 10, search change proxy settings and turn of use proxy server in the manual proxy
Make Sure all services used by your application are on, which are using host and port to utilize them . For e.g, as in my case, This error can come, If your application is utilizing a Redis server and it is not being able to connect to it on given port and host, thus producing this error .
For my case, I had an Angular SLA project template with ASP.NET Core.
I was trying to run the IIS Express from the Visual Studio WebUI solution, triggering the "Actively refused it" error.
The problem, in this case, wasn't connected with the Firewall blocking the connection.
It turned out that I had to run the Angular server independently of the Kestrel run because the Server was expecting the UI to run on a specific port but wasn't actually.
For more information, check the official Microsoft documentation.
I had similar problem. In launchSettings, my IIS Express was configured on one port, and there was another launch profile that started on another ApplicationUrl with another port.
Starting the web app up with the IIS Express profile led me to have the error.
I am using the Apache ActiveMQ Artemis AMQP message broker. I started getting the "No connection could be made because the target machine actively refused it" exception when trying to send and receive messages with the broker after a reboot. On a computer where the same type of broker still worked, netstat -anb showed that the broker was listening on the expected port 5672. On the computer with the error, the broker was not listening. On the computer with the error, starting the broker resulted in the following warning's appearing in Microsoft Event Viewer's "Windows Logs > System":
The system failed to register host (A or AAAA) resource records for network adapter
with settings:
Adapter Name : {286EE2DA-3D81-41AE-VE5G-5D761FD3925E}
Host Name : mypc
Primary Domain Suffix : myco.com
DNS server list :
55.77.168.1, 74.86.130.1
Sent update to server : 186.952.335.157:45
IP Address(es) :
182.269.1.437
Either the DNS server does not support the DNS dynamic update protocol or the authoritative zone for the specified DNS domain name does not accept dynamic updates.
To register the DNS host (A or AAAA) resource records using the specific DNS domain name and IP addresses for this adapter, contact your DNS server or network systems administrator.
I was able to use the broker without error after I ran the following in a cmd.exe with administrative privileges, rebooted, and waited about fifteen minutes:
ipconfig /flushdns
ipconfig /renew
ipconfig /registerdns

Run Ratchet on a subdomain as a complete own service to provide a custom WebSocket

I'm currently trying to host my own WebSocket server using Ratchet http://socketo.me/docs/push.
The problem is that I can't find a good tutorial that shows me how I can host this on a subdomain. So hopefully someone can help me here.
My plan:
I already have a basic auth secured subdomain called ws.my-domain.de. Now I want to run Ratchet on my subdomain to provide this as a service for my main domain and all my subdomains.
At my main domain my-domain.de I've WordPress running so this is where I want to use my own WebSocket first via the client side tutorial from the page I've posted above:
<script src="https://gist.githubusercontent.com/cboden/fcae978cfc016d506639c5241f94e772/raw/e974ce895df527c83b8e010124a034cfcf6c9f4b/autobahn.js"></script>
<script>
var conn = new ab.Session('ws://ws.my-domain.de',
function() {
conn.subscribe('kittensCategory', function(topic, data) {
// This is where you would add the new article to the DOM (beyond the scope of this tutorial)
console.log('New article published to category "' + topic + '" : ' + data.title);
});
},
function() {
console.warn('WebSocket connection closed');
},
{'skipSubprotocolCheck': true}
);
</script>
So can please someone show me the steps I need to do? I'm completely new with this. I know how to use it on the client side, but I don't know how to provide it as a service and then use it in PHP (WordPress).
I'm assuming you are on a VPS or dedicated server.
You need to run your WebSocket as a daemon and then create a vhost for your subdomain in Nginx or Apache and using that create a reverse proxy to your WebSocket server.
Running ratchet as a daemon
Nginx WebSocket reverse proxy
Apache WebSocket reverse proxy

Call php file via axios requert has been blocked by CORS policy in VUE CLI 3

I'm calling php file via axios get method in vue cli 3.
my servers: node js and wamp server
My app (node) path http://localhost:8080/ &
my WAMP path http://localhost:80.
Now I got has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource and I saw https://cli.vuejs.org/config/#devserver-proxy but it's not working for me.
In my vue.config.js
module.exports = {
devServer: {
proxy: 'http://localhost/'
}
}
and my PHP file path in the views folder
http://localhost:80/blog/src/views/php/imageUpload.php
I need to know where I did mistake.
This is the error I'm getting:
And this is my code:
The CORS mechanism is used to enforce the client requests are coming from applications belonging to the same domain as the domain at which the server is deployed by default.In other words, it is to ensure that our own applications are only applications that access our API and to prevent applications belonging to other domains to access it. In your case, the Client application and Server application are using different ports. That breaks the rule
The requests are initiated from application running at 8080 to the server API running at 80, though they are running in the same localhost.The port differs. That's why the CORS errors are thrown.
Please set the header Access-Control-Allow-Origin to localhost:8080 in the your PHP application to allow the cross domain requests.
Please read the Functional overview of CORS mechanism here

Local Angular's proxy to local api can't connect

I'm having trouble getting my local dev server of an Angular app to connect to my local PHP server of my api.
It's pretty much exactly the same problem expressed in this question:
ECONNREFUSED for proxy request from localhost to another localhost
Imagine the following:
/api (PHP API source)
/myapp (angular app)
I run the following in /api:
php -S localhost:8000
Then, in /myapp, I run the following:
ng serve
In my app, I have the following proxy.conf.json:
{
"/api.php/v1/User": {
"target": "http://localhost:8000",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
/api/api.php is the main entrypoint for all api calls. I then use the rest of the address to identify the correct call, prepended by /v1/User.
I've confirmed that the API runs fine by it's self. But when accessing the app in the browser the following errors occur:
[HPM] POST /api.php/v1/User/Auth -> http://localhost:8000
[HPM] Error occurred while trying to proxy request /api.php/v1/User/Auth from localhost:4200 to http://localhost:8000 (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)
No errors are received on the PHP server side, which leads me to believe the proxy isn't even talking to the PHP server.

Symfony2 WebSocketBundle - ZMQ Push not working

I'm using Symfony2 to build a simple chat application.
I decided to use the GeniusesOfSymfony/WebSocketBundle for my WebSocket, which is powered by Ratchet :
https://github.com/GeniusesOfSymfony/WebSocketBundle
I managed to get the chat working using PubSub, but I want to use the push integration instead: I want the client to send the message via AJAX to my Symfony2 controller, which in turn should push the message to all clients of the WebSocket.
I followed this documentation page:
https://github.com/GeniusesOfSymfony/WebSocketBundle/blob/master/Resources/docs/Pusher.md
I've tried using both ZMQ and Websocket Pusher.
With ZMQ, when I run the websocket, I get the cmd notification:
ZMQ transport listening on 127.0.0.1:5555
However, pushing messages doesn't work:
$pusher = $this->container->get("gos_web_socket.zmq.pusher");
//push(data, route_name, route_arguments)
$pusher->push(["type" => "newMessage", "text" => $request->request->get("msg")], "chat_topic");
This is the onPush method in my ChatTopic class:
class ChatTopic implements TopicInterface, PushableTopicInterface {
public function onPush(Topic $topic, WampRequest $request, $data, $provider) {
$topic->broadcast($data);
}
}
The onPush method never gets called. Also, the pusher events never get fired. There doesn't appear to be an exception in the code.
With WebSocket Pusher, I'm not even able to get the service running. There is no notification in the cmd like with ZMQ, and using netstat command I was not able to detect that it's listening on port 1337. When I try to push to it, I get the exception :
Could not open socket. Reason: No connection could be made because the
target machine actively refused it
Probably because there is no service listening on port 1337.
P.S. - I am on Windows 10 and using WAMP server. I've successfully installed the ZMQ extension on WAMP, as indicated in the phpinfo().
The documentation you quoted, pusher.md, is not complete. You must also register your topic as a service and tag it as an available topic for the config.
It would be best to follow the TopicSetup.md. However, here is the missing highlight.
The new ChatTopic class can be registered in the Symfony Services AppBundle/Resources/config/services.yml and tagged like so:
services:
app.chat_topic_service:
class: App\AppBundle\Topic\ChatTopic
tags:
- { name: gos_web_socket.topic }

Categories